2010-10-30 16 views
28

In ogni articolo la risposta a una domanda "Come aggiungere una stringa a un JEditorPane?" è qualcosa di simile aJTextPane che aggiunge una nuova stringa

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

Ho provato questo:

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

E come risultato ho ottenuto "il tempo di terminazione: 1000" senza "la distribuzione Processi:"

Perché è accaduto? ??

risposta

56

Dubito che sia l'approccio consigliato per l'aggiunta di testo. Ciò significa che ogni volta che si modifica del testo è necessario eseguire nuovamente l'intero documento. La ragione per cui le persone possono farlo è che non capiscono come usare un JEditorPane. Questo include me.

Preferisco di gran lunga utilizzare un JTextPane e quindi utilizzare gli attributi. Un semplice esempio potrebbe essere qualcosa di simile:

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

Grazie, ci proverò. – Dmitry

+0

Che funziona !!! Ma perché setText + get Text non funziona? – Dmitry

+3

Ciò ricrea il documento e perde tutti gli attributi personalizzati aggiunti in precedenza. – camickr

4

setText consente di impostare tutto il testo in un riquadro di testo. Utilizzare l'interfaccia StyledDocument per aggiungere, rimuovere, così via sul testo.

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

Grazie, Istao! – Dmitry

23

A JEditorPane, solo una come un JTextPane ha un Document che è possibile utilizzare per inserire le stringhe.

Che cosa si vorrà fare per aggiungere testo in un JEditorPane è questo frammento:

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

Ho provato questo e ha funzionato bene per me. Lo doc.getLength() è il punto in cui si desidera inserire la stringa, ovviamente con questa riga la si aggiungerebbe alla fine del testo.

+1

Grazie, funziona !!! – Dmitry

+0

Ma perché setText + get Text non funziona? – Dmitry

+0

Non posso rispondere con certezza, non ho giocato affatto con JEditorPane, solo JTextPane per lo più. Dovrei giocarci e cercarlo prima di poter rispondere. –

Problemi correlati