Fragen zur Beziehung zwischen StyledDocument und JTextPane und zur richtigen Verwendung der Schnittstelle - java, swing, class, interface, styleddocument

Ich bin neu in Java und arbeite an Java Swing GUI. Kürzlich habe ich einen Beitrag gelesen: Zentrieren von Text in einer JTextArea oder JTextPane - Horizontale Textausrichtung

Die Lösung im Inneren funktionierte perfekt, aber ich habe einige konzeptionelle Fragen zu stellen.

Ich habe die Einführung von Interface und Klassen gelesenauf der Orakel-Website. Es besagt, dass die Schnittstelle eine Reihe von Methoden mit leeren Körpern enthält, dann müsste die Klasse, die eine solche Schnittstelle implementiert, alle in der Schnittstelle genannten Methoden deklarieren, um erfolgreich erfüllt zu werden.

Hier kommt meine Frage: Nachdem ich die Dokumente gelesen hatte, wusste ich das StyledDocument ist eine Schnittstelle, aber was bedeutet folgender Code?

StyledDocument doc = textPane.getStyledDocument();

Meine Interpretation ist, dass ich denke, dass ein JTextPane intern das StyledDocument implementiert, so dass diese Codezeile das vorhandene StyledDocument (Aber es sollte nicht als Instanz bezeichnet werden, da wir keine Instanz der Schnittstelle erstellen konnten. Wie soll ich das beschreiben?. Wenn dies zutrifft, sollten in JTextPane alle Methoden in der StyledDocument-Schnittstelle definiert sein.

Habe ich im obigen Absatz Recht?

Dann habe ich versucht, diese zwei Codezeilen nicht zu schreiben:

StyledDocument doc = textPane.getStyledDocument();
doc.setParagraphAttributes(0, doc.getLength(), center, false);

Aber ich habe direkt benutzt:

textPane.setParagraphAttributes(center, false);

Und das hat auch perfekt funktioniert.

Gibt es also Unterschiede zwischen den beiden Implementierungen?

Ist mein Code eine gute Vorgehensweise?

Vielen Dank für Ihre Hilfe!

Antworten:

1 für die Antwort № 1

Ich glaube, du bleibst am Konzept des Polymorphismus hängen, sieh dir den Weg an Polymorphismus für Starter.

Meine Interpretation ist, dass ich aJTextPane implementiert das StyledDocument intern, so dass diese Codezeile das vorhandene StyledDocument erhalten soll (aber es sollte nicht als Instanz bezeichnet werden, da wir keine Instanzen von Interfaces erstellen konnten. Wie soll ich das beschreiben?). Wenn dies zutrifft, sollten in JTextPane alle Methoden in der StyledDocument-Schnittstelle definiert sein.

Nein getStyledDocument Methode gibt ein Objekt zurück, welches die StyledDocument Schnittstelle. JTextPane implementiert diese Funktionalität nicht direkt, sondern delegiert die Anforderungen an die Instanz des Objekts, das das Objekt implementiert StyledDocument Schnittstelle.

Zusammen bieten sie die Mittel, mit denen formatierter Text angezeigt werden kann. Dies ist ein Konzept der Model View Controller Paradigma, wo nicht-visuelle Funktionalität (das Modell oder StyledDocument) ist von der Ansicht getrennt (die JTextPane)

Dann habe ich versucht, diese zwei Codezeilen nicht zu schreiben:

StyledDocument doc = textPane.getStyledDocument();
doc.setParagraphAttributes(0, doc.getLength(), center, false);

Aber ich habe direkt benutzt:

textPane.setParagraphAttributes(center, false);

Und das hat auch perfekt funktioniert.

Gibt es also Unterschiede zwischen den beiden Implementierungen?

Ja und nein. setParagraphAttributes delegiert die Funktionalität an die StyledDocument, wie der folgende Codeschnipsel entnommen wird JTextPane zeigt:

public void setParagraphAttributes(AttributeSet attr, boolean replace) {
int p0 = getSelectionStart();
int p1 = getSelectionEnd();
StyledDocument doc = getStyledDocument();
doc.setParagraphAttributes(p0, p1 - p0, attr, replace);
}

Es dient einfach als eine bequeme Methode, um Ihr Leben ein wenig einfacher zu machen

Ist mein Code eine gute Vorgehensweise?

Ich sehe kein Problem mit der Nutzung der bereitgestellten Funktionen, um Ihre Ziele zu erreichen.


Speisekarte