Java で単純な WYSIWYG RTF エディターを開発していますが、小さな問題があります。スタイル選択トグル ボタン (太字、斜体、下線など) をユーザーのテキスト選択に同期できるようにする必要があります。たとえば、現在のテキスト選択がプレーンの場合、太字、斜体、および下線付きのトグル ボタンは選択されませんが、ユーザーが太字と下線付きのテキストを選択すると、太字と下線付きのトグル ボタンが選択されます。
これで、必要な選択属性が得られると確信していJTextPane.getInputAttributes()
ますが、キャレット更新イベントのリッスンに問題があります。問題は、にアタッチされたキャレットリスナーがJTextPane
、入力属性の変更が発生した後に呼び出されるように見えることです。そのため、選択は常に一歩遅れています。つまり、トグル ボタンが更新される前に、テキストを 2 回選択する必要があります。
ここで重要なコードは次のとおりです。
textPane.addCaretListener(new CaretListener() {
@Override
public void caretUpdate(CaretEvent e) {
syncAttributesWithUI(textPane.getInputAttributes());
}
});
と:
private void syncAttributesWithUI(AttributeSet attributes) {
boldButton.setSelected(StyleConstants.isBold(attributes));
italicButton.setSelected(StyleConstants.isItalic(attributes));
underlineButton.setSelected(StyleConstants.isUnderline(attributes));
}
前もって感謝します!