質問
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)メソッドで、強調表示されているようにペイントします。
所属していません StackOverflow