JTextPane附加一个新字符串

时间:2010-10-30 14:49:03

标签: java swing jtextpane styleddocument

在每篇文章中回答“如何将字符串附加到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>");

结果我得到了“终止时间:1000”而没有“进程分发:”

为什么会这样?

3 个答案:

答案 0 :(得分:63)

我怀疑这是附加文字的推荐方法。这意味着每次更改某些文本时,都需要重新整理整个文档。人们可能这样做的原因是因为不了解如何使用JEditorPane。那包括我。

我更喜欢使用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); }

答案 1 :(得分:26)

JEditorPane,就像JTextPane一样,Document可以用来插入字符串。

要将文字附加到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()是您要插入字符串的位置,显然您可以将此行添加到文本的末尾。

答案 2 :(得分:4)

setText用于设置文本窗格中的所有文本。使用StyledDocument界面追加,删除,等等文本。

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