gpt4 book ai didi

java - JTextPane - HTMLDocument : when adding/removing a new style, 其他属性也发生变化

转载 作者:行者123 更新时间:2023-12-01 14:23:24 24 4
gpt4 key购买 nike

我有一个 JTextPane(或 JEditorPane),我想在其中添加一些按钮来格式化文本(如图所示)。

当我将所选文本更改为粗体(创建新样式)时,字体系列(和其他属性)也会更改。为什么?我想设置(或删除)所选文本中的粗体属性,其他属性保持不变。

这就是我正在尝试的:

private void setBold(boolean flag){
HTMLDocument doc = (HTMLDocument) editorPane.getDocument();
int start = editorPane.getSelectionStart();
int end = editorPane.getSelectedText().length();

StyleContext ss = doc.getStyleSheet();

//check if BoldStyle exists and then add / remove it
Style style = ss.getStyle("BoldStyle");
if(style == null){
style = ss.addStyle("BoldStyle", null);
style.addAttribute(StyleConstants.Bold, true);
} else {
style.addAttribute(StyleConstants.Bold, false);
ss.removeStyle("BoldStyle");
}

doc.setCharacterAttributes(start, end, style, true);
}

但正如我上面所解释的,其他属性也会发生变化:

任何帮助将不胜感激。提前致谢!

enter image description here

http://oi40.tinypic.com/riuec9.jpg

最佳答案

您想要做的事情可以通过以下两行代码之一来完成:

new StyledEditorKit.BoldAction().actionPerformed(null);

  or

editorPane.getActionMap().get("font-bold").actionPerformed(null);

...其中 editorPane 当然是 JEditorPane 的实例。两者都将无缝处理已定义的任何属性并支持文本选择。

关于您的代码,它不适用于以前样式化的文本,因为您正在什么都不覆盖相应的属性。我的意思是,您永远不会使用 getAttributes() method 来收集已为当前选定文本设置的属性值。 。因此,您实际上是将它们重置为全局样式表指定的任何默认值。

好消息是,如果您使用上面的代码片段之一,则无需担心这一切。希望有帮助。

关于java - JTextPane - HTMLDocument : when adding/removing a new style, 其他属性也发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17363257/

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