web-dev-qa-db-fra.com

JTextPane ajoutant une nouvelle chaîne

Dans chaque article, la réponse à une question "Comment ajouter une chaîne à un JEditorPane?" est quelque chose comme

jep.setText(jep.getText + "new string");

J'ai essayé ceci:

jep.setText("<b>Termination time : </b>" + 
                        CriterionFunction.estimateIndividual_top(individual) + " </br>");
jep.setText(jep.getText() + "Processes' distribution: </br>");

Et en conséquence, j'ai obtenu "Temps de résiliation: 1000" sans "Distribution des processus:"

Pourquoi est-ce arrivé???

32
Dmitry

Je doute que ce soit l'approche recommandée pour ajouter du texte. Cela signifie que chaque fois que vous modifiez du texte, vous devez réanalyser l'intégralité du document. La raison pour laquelle les gens peuvent le faire est parce qu'ils ne comprennent pas comment utiliser un JEditorPane. Cela m'inclut.

Je préfère de loin utiliser un JTextPane puis utiliser des attributs. Un exemple simple pourrait être quelque chose comme:

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

Un JEditorPane, tout comme un JTextPane a un Document que vous pouvez utiliser pour insérer des chaînes.

Ce que vous voudrez faire pour ajouter du texte dans un JEditorPane est cet extrait:

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();
   }
}

J'ai testé cela et cela a bien fonctionné pour moi. La doc.getLength() est l'endroit où vous voulez insérer la chaîne, évidemment avec cette ligne vous l'ajouteriez à la fin du texte.

26
Brandon Buck

setText consiste à définir tout le texte dans un volet de texte. Utilisez l'interface StyledDocument pour ajouter, supprimer et ainsi de suite du texte.

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