# Fettdruck



## cedi (12. Aug 2011)

Hi alle zusammen,
ich hab ein Problem:
Und zwar habe ich einen laaaaaaaaaaaaaangen String mit mehreren tausen Wörtern.
Und dieser wird nun auf einer Grafischen Oberfläche in einem JTextArea ausgegeben.
Nun will ich aber einzelne Wörter (genauer gesagt, sind es bestimmte Zahlen, die keine feste Formatierung etc haben) Fett drucken lassen. Also sie sollen innerhalb des JTextArea Fett gedruckt sein.
Ich habe schon stundenlang gegoogelt, und alles was ich bisher gefunden habe, hat nicht funktioniert.
Also ich habe es mal so versucht, dass ich das Wort, was ich Fett drucken will in einem Seperaten String habe, und dann html hinzufüge und dann über .replace() das wort im großen String zu ersetzen. Aber das funktioniert leider nicht.

ich hoffe mir kann jemand helfen 

danke schonmal

cedi


----------



## homer65 (12. Aug 2011)

JTextArea unterstützt das nicht. Du solltest andere Komponenten wie JEditorPane oder JTextPane benutzen.


----------



## cedi (12. Aug 2011)

ok. ja, an JEditorPane hab ich auch schon mal gedacht.
Aber das geht da iwie auch nicht


----------



## homer65 (12. Aug 2011)

Mal ein einfaches Beispiel:
[Java]
package pack;
import javax.swing.*;
public class TestMenu extends Menu
{
	private JEditorPane cpan = new JEditorPane();
	public TestMenu()
	{
		super("TestMenu");
		String html = "<html>";
		html += "<body>";
		html += "Hallo <b>Fett</b>";
		html += "</body";
		html += "</html>";
		cpan.setContentType("text/html");
		cpan.setText(html);
		setContentPane(cpan);
	}
}
[/Java]


----------



## cedi (12. Aug 2011)

ok danke 
Ich werds mal versuchen


----------



## cedi (12. Aug 2011)

```
String html1 = "<html>";
        html1 +="<body>";
        html1 += va.wort();
        html1 += "</body>";
        html1 += "</html>";
        String replaced1 = ausgabeAusgangsDatei.getText();
        String wort1 = va.wort();
        replaced1 = replaced1.replace(wort1, html1);
        String html2 = "<html>";
        html2 +="<body>";
        html2 += va.wort();
        html2 += "</body>";
        html2 += "</html>";
        String wort2 = vu.wort();
        String replaced2 = ausgabeUebersetzteDatei.getText();
        replaced2 = replaced2.replace(wort2, html2);
```
wenn ich diesen Codeblock verwende, endet das immer ein einer exception mit dem inhalt:



> Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
> at java.lang.String.replace(String.java:2228)
> at gftlayoutchecker.MainWindow.buttonVergleicheClicked(MainWindow.java:131)
> at gftlayoutchecker.MainWindow$1.actionPerformed(MainWindow.java:74)
> ...



ich hab schon alles mögliche versucht.


----------



## Camino (12. Aug 2011)

Dann schau dir doch die Fehlermeldung genauer an (vor allem den Anfang). Du bekommst eine NullPointerException, also ist irgendwas null (ein Objekt noch nicht initialisiert oder erstellt), auf das du zugreifen möchtest. Musst du nur noch schauen was und warum. Und du bekommst auch noch die Stelle geliefert, bei der das passiert:

```
at gftlayoutchecker.MainWindow.buttonVergleicheClicked(MainWindow.java:131)
```


----------



## cedi (12. Aug 2011)

ja, das ist mir auch klar. aber die variable kann nicht null sein.
Zeile 131 ist nur da, wo 
	
	
	
	





```
va.wort
```
 aufgerufen wird.
Und in er kalsse VA steht in der Funktion wort(): 

```
public String wort(){
        String zahlAusgangsdateiTmp = zahlAusgangsDatei;
        return zahlAusgangsdateiTmp;
    }
```

und zahlAusgangsDatei ist gültig. Da ist inhalt vorhanden.


----------



## Camino (12. Aug 2011)

Dann mach doch mal Testausgaben auf der Konsole und lass dir die Werte z.B. für wort1 und wort2 ausgeben. Oder schau, was bei einer Ausgabe von va rauskommt. Irgendein Wert wird schon null sein. Bei so wenig Code kann man ja nicht viel sehen, sondern nur raten...


----------



## thE_29 (12. Aug 2011)

Vorallem was für nen Sinn hat diese Wort Methode? Da kannste gleich ein return machen..

Achja, das ist die Zeile wo der Fehler auftreten soll? Ansonsten poste die  Codezeilen wo der Fehler aufgetrten ist


----------



## cedi (13. Aug 2011)

jop. hab den Fehler gefunden.
War n Tippfehler in nem String, welchen ich mir über return zurückgeben lassen wollte. und der war natürlich null


----------



## André Uhres (13. Aug 2011)

Hallo Cedi,

im jdk findest du unter \demo\jfc\Stylepad ein Beispiel, das auch hilfreich sein könnte .

Gruß,
André


----------



## cedi (13. Aug 2011)

danke 
hat sich aber mittlerweile erledigt


----------



## L-ectron-X (13. Aug 2011)

cedi hat gesagt.:
			
		

> ```
> String html2 = "<html>";
> html2 +="<body>";
> html2 += va.wort();
> ...


Auf solche Konstrukte solltest du lieber verzichten. Wenn es noch mehr wird, kann das Ganze recht unperformant werden.
Benutze daher am besten zur Verknüpfung von Strings den [japi]StringBuilder[/japi].


----------



## André Uhres (14. Aug 2011)

Der Vorschlag von L-ectron-X könnte etwa so aussehen:

```
String html2 = (new StringBuilder()).append("<html><body>").
        append(va.wort()).
        append("</body>").
        append("</html>").
        toString();
```
Interessanterweise ist das dasselbe, was mein Compiler generiert, wenn ich es so schreibe:

```
String html2 = "<html>"
        + "<body>" 
        + va.wort() 
        + "</body>"
        + "</html>";
```
Gruß,
André


----------

