2010-10-30 15 views
28

W każdym artykule odpowiedź na pytanie "Jak dołączyć ciąg do JEditorPane?" jest coś takiego jakJTextPane dołączanie nowego ciągu

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

Próbowałem to:

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

I w rezultacie dostałem "czas zakończenia: 1000" bez "dystrybucja procesów:"

Dlaczego tak się stało? ??

Odpowiedz

56

Wątpię, czy to zalecane podejście do dołączania tekstu. Oznacza to, że za każdym razem, gdy zmieniasz jakiś tekst, musisz ponowić cały dokument. Powodem, dla którego ludzie mogą to robić, jest to, że nie rozumieją, jak korzystać z JEditorPane. To dotyczy mnie.

Wolę używać JTextPane, a następnie używać atrybutów. Prostym przykładem może być coś takiego:

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

Dziękuję, spróbuję tego. – Dmitry

+0

To działa !!! Ale dlaczego setText + get Text nie działa? – Dmitry

+3

Spowoduje to odtworzenie dokumentu i utracenie wszystkich atrybutów niestandardowych dodanych wcześniej. – camickr

4

setText służy do ustawienia całego tekstu w tekście. Użyj interfejsu StyledDocument, aby dołączyć, usunąć i tak w tekście.

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

Dziękuję, Istao! – Dmitry

23

JEditorPane, tylko jak JTextPane ma Document, które można wykorzystać do wprowadzania ciągów.

Co będziemy chcieli zrobić, aby dołączyć tekst w JEditorPane jest ten fragment:

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

testowałem to i to działało dobrze dla mnie. doc.getLength() jest tam, gdzie chcesz wstawić łańcuch, oczywiście w tym wierszu dodajesz go na końcu tekstu.

+1

Dziękuję, to działa !!! – Dmitry

+0

Ale dlaczego setText + get Text nie działa? – Dmitry

+0

Nie mogę odpowiedzieć na pewno, w ogóle nie grałem z JEditorPane, głównie JTextPane. Musiałbym się bawić i zbadać, zanim zdołam odpowiedzieć na to pytanie. –