# JOptionPane.showMessageDialog mit automatischem Zeilenumbruch



## oiuoiuoiuoiuoiu (20. Sep 2011)

Hallo!

Mit

```
JOptionPane.showMessageDialog(this, text);
```
lasse ich mir Fehlermeldungen grafisch ausgeben. Es wäre gut wenn dabei längerer Text automatisch umgebrochen wird. Ist das möglich oder muss ich mir da was eigenes programmieren?


----------



## pl4gu33 (20. Sep 2011)

oiuoiuoiuoiuoiu hat gesagt.:


> Hallo!
> 
> Mit
> 
> ...



mm die Frage ist woher soll die Box das wissen, wann du nen Umbruch haben willst? 
du kannst in deinen Text einfach ein \n reinsetzen da wird dann umgebrochen,...

geht natürlich nur, wenn du den Text vorher festlegst


----------



## oiuoiuoiuoiuoiu (20. Sep 2011)

pl4gu33 hat gesagt.:


> mm die Frage ist woher soll die Box das wissen, wann du nen Umbruch haben willst?


Mein Bildschirm wär z.B. ne gute Grenze  Aber jede andere maximale Breite wär auch in Ordnung, nur jetzt kommen teilweise so breite Fenster raus, dass man erstmal an ihnen ziehen muss, um überhaupt den OK-Knopf zu sehen.



> du kannst in deinen Text einfach ein \n reinsetzen da wird dann umgebrochen,...
> 
> geht natürlich nur, wenn du den Text vorher festlegst


Das geht leider nicht, da der Text nicht von mir kommt


----------



## Meru (20. Sep 2011)

Du kannst es ggf mit HTML probieren, damit geht es vielleicht


----------



## pl4gu33 (20. Sep 2011)

oiuoiuoiuoiuoiu hat gesagt.:


> Mein Bildschirm wär z.B. ne gute Grenze  Aber jede andere maximale Breite wär auch in Ordnung, nur jetzt kommen teilweise so breite Fenster raus, dass man erstmal an ihnen ziehen muss, um überhaupt den OK-Knopf zu sehen.
> 
> 
> Das geht leider nicht, da der Text nicht von mir kommt



dann könntest du evtl. ne Methode schreiben, die den Text alle z.b. 20 Zeichen nach ner Lücke also indexof(" ") untersucht und dann nen "\n" einfügt,... wäre jetzt für mich die einfachste Lösung vll. nicht die Beste^^


----------



## Gast2 (20. Sep 2011)

Denke auch, dass du das manuell machen musst. Ich mache die Umbrüche per HTML. Allerdings sind das Texte welche aus den Übersetzungsdateien vorgegeben werden. Da haben wir uns geeinigt per HTML zu formattieren (Umbrüche fett ect.). Das macht bei uns eine andere Abteilung.


----------



## bERt0r (20. Sep 2011)

Hab mir mal was ähnliches geschrieben:

```
public void showError(String s)
	{
		StringBuffer sb=new StringBuffer();
		String[] words=s.split(" ");
		int i=0;
		int rowLength=0;
		while(i<words.length)
		{
			if(rowLength>50)
			{
				sb.append("\n");
				rowLength=0;
			}
			rowLength=rowLength+words[i].length()+1;
			sb.append(words[i]).append(" ");
			i++;
		}
		
			JOptionPane.showMessageDialog(this,
			   sb.toString(),
			   "Fehler",
			   JOptionPane.ERROR_MESSAGE);
	}
```


----------



## oiuoiuoiuoiuoiu (20. Sep 2011)

Danke bERt0r. Habe das ganze mal noch ergänzt so dass explizite Zeilenumbrüche bedacht werden:


```
public static void showError(String s)
	{
		StringBuilder sb = new StringBuilder();
		String[] lines = s.split("\n");
		for (String line : lines) {
			String[] words = line.split(" ");
			int i = 0;
			int rowLength = 0;
			while (i < words.length)
			{
				if (rowLength > 50)
				{
					sb.append("\n");
					rowLength = 0;
				}
				rowLength = rowLength + words[i].length() + 1;
				sb.append(words[i]).append(" ");
				i++;
			}
			sb.append("\n");
		}
		JOptionPane.showMessageDialog(null, sb.toString(), "Fehler", JOptionPane.ERROR_MESSAGE);
	}
```


----------



## KrokoDiehl (20. Sep 2011)

Der Vollständigkeit halber:
Du kannst einer JOptionPane auch eine JTextArea geben, die den Zeilenumbruch für dich handhaben kann. Könnte in etwa so aussehen:


```
public void showMessageBox(String msg) {
    final JTextArea textBox = new JTextArea(msg, 10, 30);
    textBox.setBorder(null);
    textBox.setEditable(false);
    textBox.setLineWrap(true);
    // ggfs weitere einstellungen

    JOptionPane.showMessageDialog(null, textBox);
}
```


----------



## Gast2 (21. Sep 2011)

Da wird unter Umständen aber auch innerhalb des Wortes umgebrochen. Zudem sieht eine TextArea im Dialog nicht gerade schön aus. Man müsste diesen dann Optisch noch so anpassen, dass er wie ein Label aussieht. Zudem sind die Scrollbalken in einem Dialog sicher auch unerwünscht. 

Der TO kann sich natürlich eine spezielle Klasse schreiben welche z.B. von JTextArea erbt un diese nach den benötigten Kriterien modifiziert.


----------

