gpt4 book ai didi

java - JTextPane 在文本显示后丢失样式

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

我有一个线程,其功能如下:连续输入字符,这些字符存储在StringBuilder中。该字符串生成器的内容需要根据一些代码进行样式设置。当字符被附加到字符串生成器中时,我有一个循环将其拆分为字符串数组,并进行一些处理。这里很小(但本身处理完整):

SimpleAttributeSet set = new SimpleAttributeSet();

if(string.contains(code1)){
str = string;
int index = string.indexOf(code1);
string = string.replaceAll(code1, "");
StyleConstants.setForeground(set, Color.GREEN);

// data is a another variable of string builder
data.append(string);
i = sb.indexOf(string);

String st = string.substring(index);

doc.setCharacterAttributes(data.indexOf(st), st.length(), set, true);
}

//similarly there are checks and styling for other codes

//terminalArea is of JTextPane type
terminalArea.setText(dataToShow.toString());

根据代码,文本的颜色是正确的,但是当显示数据时,颜色会短暂出现,然后消失。之后,当按下某个键时,颜色会再次出现,但当松开该键时,它们就会消失。

我尝试了terminalArea.repaint(),但没有任何反应。

更新:关于 StanislavL 的回答,这是我现在的情况:

doc = new DefaultStyledDocument();
if(string.contains(code)){
str = string;
int index = string.indexOf(code);
string = string.replaceAll(code, "");
StyleConstants.setForeground(set, Color.GREEN);
dataToShow.append(string);
i = sb.indexOf(string);
String st = string.substring(index);
doc.setCharacterAttributes(dataToShow.indexOf(st), st.length(), set, true);
doc.insertString(doc.getLength() , string, null);


}
//after all conditions
terminalArea.setDocument(doc);

虽然颜色仍然存在,但只有最后着色的文本显示为彩色。前面的字符串显示为白色。请注意,整个字符串没有着色,只有一部分着色。

已解决:

StanislavL 的回答解决了这个问题。我忽略了这一点,我首先设置字符属性,然后插入数组。交换一下位置就解决了问题。

最佳答案

我假设您使用StyledEditorKit

terminalArea.setText(dataToShow.toString());

该代码只是删除您拥有的所有内容并将文本重新添加到文档中。事实上,在文档中调用了 remove(0, docLength),然后 insertString(theToStringResult) 替换了所有样式。

我建议创建一个新的 Document 实例,使用 insertString() 插入所有带有样式的文本,您可以在其中传递属性(或调用 insertString () 只需一次,并多次调用 setCharacterAttributes())。在 Document 实例准备就绪后,只需调用 terminalArea.setDocument(theDocumentInstance); 而不是 setText();

关于java - JTextPane 在文本显示后丢失样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23534184/

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