JTextPane añadiendo una nueva cadena

En cada artículo, la respuesta a la pregunta “¿Cómo agregar una cadena a un JEditorPane?” es algo así como

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

He intentado esto:

 jep.setText("Termination time : " + CriterionFunction.estimateIndividual_top(individual) + " 
"); jep.setText(jep.getText() + "Processes' distribution:
");

Y como resultado obtuve el “Tiempo de terminación: 1000” sin la distribución de “Procesos”:

¿¿¿Por qué pasó esto???

Dudo que sea el enfoque recomendado para agregar texto. Esto significa que cada vez que cambie un texto necesita volver a rastrear todo el documento. La razón por la que las personas pueden hacer esto es porque no entienden cómo usar un JEditorPane. Eso me incluye a mí.

Prefiero usar un JTextPane y luego usar atributos. Un ejemplo simple podría ser algo así como:

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

Un JEditorPane , como un JTextPane tiene un Document que puede usar para insertar cadenas.

Lo que querrá hacer para anexar texto a un JEditorPane es este fragmento:

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

Probé esto y funcionó bien para mí. El doc.getLength() es donde desea insertar la cadena, obviamente con esta línea la estaría agregando al final del texto.

setText es establecer todo el texto en un panel de texto. Use la interfaz StyledDocument para agregar, eliminar y modificar el texto.

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