JTextPane добавление новой строки - PullRequest
31 голосов
/ 30 октября 2010

В каждой статье ответ на вопрос «Как добавить строку в 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 ]

63 голосов
/ 30 октября 2010

Я сомневаюсь, что это рекомендуемый подход для добавления текста.Это означает, что каждый раз, когда вы изменяете какой-то текст, вам нужно повторно анализировать весь документ.Причина, по которой люди могут это сделать, заключается в том, что они не понимают, как использовать 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); }
26 голосов
/ 02 ноября 2010

A 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() - это место, куда вы хотите вставить строку, очевидно, с этой строкой вы добавите ее в конец текста.

4 голосов
/ 30 октября 2010

setText - установить весь текст в текстовом поле. Используйте интерфейс StyledDocument для добавления, удаления и т.д. текста.

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