0

私はJavaが初めてで、Java Swing GUIに取り組んでいます。最近、私は次の記事を読みました: JTextArea または JTextPane でのテキストの中央揃え - 水平方向のテキスト配置

内部のソリューションは完全に機能しましたが、概念的な質問がいくつかあります。

オラクルのウェブサイトでインターフェースとクラスの紹介を読みました。インターフェースには空の本体を持つメソッドのセットが含まれていると述べた場合、そのようなインターフェースを実装するクラスは、正常に準拠するためにインターフェースで言及されているすべてのメソッドを宣言する必要があります。

ここで私の質問があります: ドキュメントを読んだ後、StyledDocumentがインターフェイスであることはわかりましたが、次のコードは何を意味するのでしょうか?

StyledDocument doc = textPane.getStyledDocument();

私の解釈では、このコード行が既存の StyledDocument を受け取るように、JTextPane が StyledDocument を内部的に実装していると思います (ただし、インターフェイスのインスタンスを作成できなかったため、インスタンスと呼ぶべきではありません。どのように説明すればよいでしょうか? )。これが true の場合、JTextPane には StyledDocument インターフェイスで定義されたすべてのメソッドが必要です。

上記の段落で正しいですか?

次に、次の 2 行のコードを書かないようにしました。

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

しかし、私は直接使用しました:

textPane.setParagraphAttributes(center, false);

そして、これも完璧に機能しました。

では、2 つの実装に違いはありますか?

私のコードはそうすることをお勧めしますか?

助けてくれてどうもありがとう!

4

1 に答える 1

1

ポリモーフィズムの概念に行き詰まっていると思います。まず、ポリモーフィズムのトレイルをご覧ください。

私の解釈では、このコード行が既存の StyledDocument を受け取るように、JTextPane が StyledDocument を内部的に実装していると思います (ただし、インターフェイスのインスタンスを作成できなかったため、インスタンスと呼ぶべきではありません。どのように説明すればよいでしょうか? )。これが true の場合、JTextPane には StyledDocument インターフェースで定義されたすべてのメソッドが必要です。

いいえ。メソッドは、インターフェース getStyledDocumentを実装するオブジェクトを返し ます。この機能を直接実装するのではなく、インターフェイスを実装するオブジェクトのインスタンスに要件を委譲します。StyledDocumentJTextPaneStyledDocument

これらを組み合わせることで、スタイル付きテキストを表示できる手段が提供されます。これは、非ビジュアル機能 (モデルまたは) がビュー ( )から分離されているモデルビュー コントローラーパラダイムの概念です。StyledDocumentJTextPane

次に、次の 2 行のコードを書かないようにしました。

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

しかし、私は直接使用しました:

textPane.setParagraphAttributes(center, false);

そして、これも完璧に機能しました。

では、2 つの実装に違いはありますか?

はいといいえ。 から取得した以下のコード スニペットが示すようにsetParagraphAttributes、機能を に委譲します。StyledDocumentJTextPane

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

それは単に便利な方法として機能し、あなたの人生を少しシンプルにします

私のコードはそうすることをお勧めしますか?

提供された機能を使用して目的を達成することに問題はないと思います。

于 2015-08-05T04:37:47.200 に答える