質問

JTextPane を使用すると、 JComponents と画像を埋め込みます。ドキュメントのセクションを選択すると、テキストは強調表示されますが、埋め込まれたアイテムは強調表示されません。イベント後に CaretListener を使用して埋め込みコンポーネントに通知することができますが、マウスの選択中にそれらを強調表示する方法があるかどうか疑問に思っていましたか?

役に立ちましたか?

解決 2

JTextPane にカスタム Highlighter をインストールします。これにより、埋め込みコンポーネントを強調表示する必要があるかどうかを通知できます。

textPane.setHighlighter( new CustomHighlighter() );

// ...

private final class CustomHighlighter extends DefaultHighlighter {

    @Override
    public Object addHighlight( int p0, int p1, HighlightPainter p ) throws BadLocationException {
       Object tag = super.addHighlight(p0, p1, p);
       /* notify embedded components ... */ 
       return tag;
    }

    @Override
    public void removeHighlight( Object tag ) {
        super.removeHighlight(tag);
       /* notify embedded components ... */ 
    }

    @Override
    public void removeAllHighlights() { 
        super.removeAllHighlights();
       /* notify embedded components ... */ 
    }

    @Override
    public void changeHighlight( Object tag, int p0, int p1 ) throws BadLocationException {
       super.changeHighlight(tag, p0, p1);
       /* notify embedded components ... */ 
    }
}

他のヒント

YouはMouseMotionListenerを使用して、mouseDraggedイベントを処理できます。その後、viewToModel()メソッドを使用して、モデルのどの部分が選択されているかを知る必要があります。

さて、私は似たようなことをしました。私の場合、組み込みコンポーネントはチャットエディターのスマイリーでした。あなたがすることは、選択が発生すると、マークとドットを取得することです(e.getMark、e.getDot)。スマイリーがマークとドットの間にある場合は、ハイライトされることになっているので、スマイリーコンポーネントにハイライトするように指示するフィールドを設定し、再描画要求を出します。最後に、スマイリーコンポーネントのpaint(g)メソッドで、強調表示されているようにペイントします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top