Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 附加新字符串的JTextPane_Java_Swing_Jtextpane_Styleddocument - Fatal编程技术网

Java 附加新字符串的JTextPane

Java 附加新字符串的JTextPane,java,swing,jtextpane,styleddocument,Java,Swing,Jtextpane,Styleddocument,在每一篇文章中,对“如何将字符串附加到JEditorPane”问题的回答类似于 jep.setText(jep.getText + "new string"); 我试过这个: jep.setText("<b>Termination time : </b>" + CriterionFunction.estimateIndividual_top(individual) + " </br>"); jep.setTe

在每一篇文章中,对“如何将字符串附加到JEditorPane”问题的回答类似于

jep.setText(jep.getText + "new string");
我试过这个:

jep.setText("<b>Termination time : </b>" + 
                        CriterionFunction.estimateIndividual_top(individual) + " </br>");
jep.setText(jep.getText() + "Processes' distribution: </br>");
jep.setText(“终止时间:”+
CriterionFunction.estimateIndividual_top(个人)+“
”; jep.setText(jep.getText()+“进程的分布:
”;
结果我得到了“终止时间:1000”,没有“进程分布”:


为什么会发生这种情况?

setText是在文本窗格中设置所有文本。使用该接口添加、删除、删除文本等

txtPane.getStyledDocument().insertString(
  offsetWhereYouWant, "text you want", attributesYouHope);

我怀疑这是附加文本的推荐方法。这意味着每次更改某些文本时,都需要重新分析整个文档。人们这样做的原因是因为他们不知道如何使用绝地武士。包括我在内

我更喜欢先使用JTextPane,然后再使用属性。一个简单的例子可能是:

JTextPane textPane = new JTextPane();
textPane.setText( "original text" );
StyledDocument doc = textPane.getStyledDocument();

//  Define a keyword attribute

SimpleAttributeSet keyWord = new SimpleAttributeSet();
StyleConstants.setForeground(keyWord, Color.RED);
StyleConstants.setBackground(keyWord, Color.YELLOW);
StyleConstants.setBold(keyWord, true);

//  Add some text

try
{
    doc.insertString(0, "Start of text\n", null );
    doc.insertString(doc.getLength(), "\nEnd of text", keyWord );
}
catch(Exception e) { System.out.println(e); }

一个
JEditorPane
,就像一个
JTextPane
一样,有一个
文档可以用来插入字符串

要将文本追加到JEditorPane中,您需要执行以下代码段:

JEditorPane pane = new JEditorPane();
/* ... Other stuff ... */
public void append(String s) {
   try {
      Document doc = pane.getDocument();
      doc.insertString(doc.getLength(), s, null);
   } catch(BadLocationException exc) {
      exc.printStackTrace();
   }
}

我测试了这个,它对我很好。
doc.getLength()
是您要插入字符串的地方,很明显,使用这一行您将把它添加到文本的末尾。

这将重新创建文档并丢失您以前添加的所有自定义属性。@Dmitry将setText+getText组合到append可能被认为是草率的编程。(我个人使用它进行简单的测试。)例如,如果我打算用这种方法维护一个日志文件,每次添加日志条目时都必须生成一个新的字符串(这是一个非常糟糕的想法,因为字符串是不可变的。)这可能最终会导致明显的内存占用。很好的例子,但是没有回答在JEditorPane中添加文本的问题。如果使用,可以使用wana而不是
StyledDocument
,以保持HTML格式。我不能肯定地回答,我根本没有玩过JEditorPane,主要是JTextPane。在回答这个问题之前,我必须仔细研究一下。我认为问题在于
setText
实际上并没有导致组件自我更新,无论出于何种原因,它只在组件显示之前工作。@sh1ftst0rm我以前从未遇到过问题,但是,当我编写控制台模拟器时,我并没有依赖于setText,而是使用文档操纵进行控制。@Dmitry实际上
setText(getText()+newText)
可以工作,但它的使用仅限于没有样式的文本。对于已设置样式的文本,它将丢失以前的样式,通常您不需要它。此外,我发现并提交了,所以我不会依赖它。