gpt4 book ai didi

java - JTextPane同步样式选择UI问题

转载 作者:搜寻专家 更新时间:2023-11-01 00:53:38 24 4
gpt4 key购买 nike

我正在用 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));
}

提前致谢!

最佳答案

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

关于java - JTextPane同步样式选择UI问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2168667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com