JTextPane同步样式选择UI问题

S73*_*17H 5 java user-interface swing jtextpane

我正在用Java开发一个简单的WYSIWYG RTF编辑器并且有一个小问题.我需要能够将样式选择切换按钮(例如粗体,斜体,下划线)与用户文本选择同步.例如,如果当前的文本选择是平原,没有被选择的粗体,斜体和下划线的切换按钮,但是当用户选择一些文字,是粗体和下划线,粗体和下划线的切换按钮被选择.

现在我很确定能JTextPane.getInputAttributes()获得我想要的选择属性但是在监听插入更新事件时存在问题.问题是附加到的插入符号监听器JTextPane似乎在输入属性发生更改后被调用.所以选择总是落后一步.也就是说,我必须在切换按钮更新之前选择文本两次!

这里重要的代码是:

textPane.addCaretListener(new CaretListener() {

        @Override
        public void caretUpdate(CaretEvent e) {
            syncAttributesWithUI(textPane.getInputAttributes());
        }
    });
Run Code Online (Sandbox Code Playgroud)

和:

private void syncAttributesWithUI(AttributeSet attributes) {
    boldButton.setSelected(StyleConstants.isBold(attributes));
    italicButton.setSelected(StyleConstants.isItalic(attributes));
    underlineButton.setSelected(StyleConstants.isUnderline(attributes));
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

tra*_*god 1

正在CaretListener倾听您的意见textPane,但选择的现有属性在您的手中Document。您可以使用这些CaretEvent方法来查找所选部分,Document并根据在那里找到的样式调整按钮。不幸的是,选择可能不连贯,例如部分粗体和部分斜体。常见的做法是假设用户想要将一组全新的属性应用于整个选择。