web-dev-qa-db-ja.com

JTextPaneは新しい文字列を追加します

すべての記事で、「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」になりました。

なぜこれが起こったのですか???

32
Dmitry

私はそれがテキストを追加するための推奨されるアプローチだとは思わない。つまり、テキストを変更するたびに、ドキュメント全体を再解析する必要があります。人々がこれを行う理由は、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); }
63
camickr

JEditorPaneには、JTextPaneと同様に、文字列の挿入に使用できるDocumentがあります。

JEdi​​torPaneにテキストを追加するには、次のスニペットを使用します。

_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()は、文字列を挿入する場所です。明らかにこの行では、文字列をテキストの最後に追加します。

26
Brandon Buck

setTextは、テキストペインのすべてのテキストを設定します。 StyledDocument インターフェイスを使用して、テキストの追加、削除、その他を行います。

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