我正在用 Java 开发一个简单的 WYSIWYG RTF 编辑器并且有一个小问题。我需要能够将样式选择切换按钮(例如粗体、斜体、下划线)与用户的文本选择同步。例如,如果当前文本选择是纯文本,则不选择粗体、斜体和带下划线的切换按钮,但是当用户选择一些粗体和带下划线的文本时,会选择粗体和带下划线的切换按钮。
现在我相当确定这JTextPane.getInputAttributes()
让我得到了我想要的选择属性,但是在监听插入符号更新事件时存在问题。问题是附加到的插入符号侦听器JTextPane
似乎在输入属性更改发生之后被调用。所以选择总是落后一步。也就是说,在更新切换按钮之前,我必须选择文本两次!
这里的重要代码是:
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));
}
提前致谢!