【发布时间】:2010-01-30 17:14:53
【问题描述】:
我正在用 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));
}
提前致谢!
【问题讨论】:
-
您的问题得到解答了吗?如果没有,请考虑发布 SSCCE
标签: java swing user-interface jtextpane