# JTextArea / JEditorPane + Text formatieren



## Eminent (14. Mai 2010)

Hi,

ich habe hier gerade ein kleines Problem. Grundsätzlich könnte ich das (denke ich) schon lösen, wenn ich mir eigene Ableitungen schreibe und alles so implementiere, wie ich mir das vorstelle. Allerdings würde ich mir die "Arbeit" gerne sparen, wenn Java das von sich aus hergibt.

Also es ist so, ich möchte grundsätzlich die Funktionen einer JTextArea nutzen. Dabei ist für mich vor allem die Methode JTextArea#append(String) wichtig, da ich immer wieder Text ans Ende anfügen möchte.
Den angezeigten Text würde ich jetzt allerdings gerne noch formatieren. Für den Anfang würde es mir reichen einzelne Wörter unterstreichen zu können. Diese Funktion würde mir JEditorPane ermöglichen, wenn ich den Content auf text/html setze. Leider bietet JEditorPane mir jedoch keine Möglichkeit Text "einfach" am Ende anzuhängen.

Habe ich das was übersehen oder muss ich da wirklich eine "append-Methode" für JEditorPane selbst implementieren?

Vielen Dank schon mal für eure Hilfe!!

Gruß
Eminent


----------



## Daniel_L (17. Mai 2010)

Vielleicht hilft statt append die insertString-Methode weiter?

Document (Java 2 Platform SE v1.4.2)
How to Use Editor Panes and Text Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)

Gruß
Daniel


----------



## Blakh (17. Mai 2010)

Ich glaub das Problem hatte ich auch.... habe da eine Lösung gefunden:


```
public void appendString(String message) {

int textLength;	

// Set the style 
StyleContext styleContext = StyleContext.getDefaultStyleContext();
AttributeSet colStyle = styleContext.addAttribute(SimpleAttributeSet.EMPTY,
				StyleConstants.Foreground, color);
		
// Append the message with the specified style
textLength = textPane.getText().length(); 
textPane.setCaretPosition(textLength);
textPane.setCharacterAttributes(colStyle, false);
textPane.replaceSelection(message);

}
```

Mit nem JEditorPane müsste es genauso gehen.


----------



## Eminent (31. Mai 2010)

Hallo und erstmal danke für eure Antworten.

Ich war leider verhindert, deshalb erst jetzt meine Antwort.

@Daniel_L: JEditorPane hat keine insertString-Methode

@Blakh: Die Idee so hatte ich auch aber da ich verschiedene Formatierungen mittels HTML haben möchte, z. B. <b>*fett*</b>, musste ich den den ContentType des JEditorPane auf "text/html" stellen. Das hat dann zur Folge, dass bei getText() auch alles möglich an HTML-Tags mit kommt. Deshalb kommt da z. B. unter anderem </html> am Ende. Wenn ich dann ans Ende etwas anfüge kommt da nichts vernünftiges mehr raus.

Da es wohl leider nichts "einfacheres" gibt habe ich mir jetzt eine eigene Ableitung von JEditorPane geschrieben und in dieser eine folgende append-Methode implementiert:


```
/**
    * Fügt den übergebenen Text am Ende des JEditorPane an und fügt ggf. noch 
    * einen Zeilenumbruch hinzu.
    * 
    * @param sText String - Anzufügender Text
    * @param bLineWrapp boolean - Schalter ob Zeilenumbruch am Ende
    */
   public void append(final String sText, final boolean bLineWrapp) {
      String sTemp = getText();
      setText(sTemp.substring(0, sTemp.lastIndexOf("</body>")) 
         + sText 
         + (bLineWrapp ? "<br>" : ""));
   }
```

Ich weiß nicht ob das die "beste" Lösung ist, aber sie funktioniert 

Gruß
Eminent


----------

