# Mehrere Zeilen unter ~.showMessageDialog



## Cyston (27. Jan 2011)

Hallo Leute,

ich hab erst vor kurzem mit JavaProgrammierung angefangen und hab hier schon das erste Problem:

Die eigentliche Aufgabe besteht darin wie im Lotto 6 Zahlen zwischen 1 und 49 random zu erstellen.


```
package glueck1;
import javax.swing.*;
public class Lotto1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		int Zufall = 0;
		for (int Nr = 1; Nr <= 6; Nr++)
		{
			Zufall = (int)(Math.random()*49)+1;
			/*System.out.println
			(Nr + ". Ziehung: " + Zufall);*/
                        JOptionPane.showMessageDialog
                         (null, Nr + ". Ziehung: " + Zufall);

		}
	}

}
```

Ich habe die Originalzeilen rauskommentiert.
Das Ergebnis ist leider nicht das was ich erwartet habe. Wenn ich es ausführe zeigt mir Eclipse die Zahlen nicht in einer sondern in 6 aufeinanderfolgenden Boxen an (durch klicken auf OK).

Wie lass ich das Ergebnis auf eine Box anzeigen? Wenn möglich untereinander?

Danke schonmal für die Antworten


----------



## Purgator (27. Jan 2011)

Du erhältst immer eine neue MessageBox, weil du ja jedesmal eine neue startest.
Damit du nur eine mit allen Zahlen erhältst musst du dir zuerst den String aufbauen, welcher dann angezeigt werden soll - z.B.:

```
String zahlen = "";
for (int Nr = 1; Nr <= 6; Nr++)
        {
            zahlen += ((int)(Math.random()*49)+1) + "<br>"; 
        }
```
das "<br>" hänge ich ran, weil man in labels html nutzen kann und somit auch Zeilenumbrüche darstellbar sind.
Den eigentlichen ausgabeString musst du dann noch mit html-Tags umranden

```
String ausgabe = "<html> Die zahlen sind<br>" + zahlen + "</html>";
```
Den Text musst du natürlich noch für dich anpassen, aber im groben funktioniert das so.
Das showMessageDialog rufst du dann nach der Schleife auf und sagst es soll den String ausgabe anzeigen lassen.


----------



## Tomate_Salat (27. Jan 2011)

```
System.out.println
(Nr + ". Ziehung: " + Zufall);
```
wo hast du den eine solche Schreibweise her oO. Gewöhne dir das besser garnicht erst an, solltest du das mal beruflich machen wollen, dann darfst du es dir unter garantie später wieder abgewöhnen. Bleib beim gewohnten:

```
System.out.println(Nr + ". Ziehung: " + Zufall)
```

und hier haben wir noch das nächste Konventionsproblem: variablen/referenzen in lowerCamelCase schreiben:

```
System.out.println(nr + ". Ziehung: " + zufall)
```

und i.d.R nutzt man hier in der for-schleife den variablenname [c]i[/c]. Natürlich geht auch ein eigener, ich wollte nur darauf hinweisen. An und für sich verstößt es nämlich gegen keine Konvention.


----------



## Cyston (27. Jan 2011)

Ich habe nun einige Varianten durchprobiert um die erwähnten Zeilen einzufügen, leider nohc immer nicht das Ergebnis was ich haben wollte. Könntest du mir die Zeilen einfügen? Vielleicht hab ich es in die falsche Zeile reingetan (anfänger eben).

Danke auch für den Hinweis bezüglich der Schreibweise. Mein Kurs fängt in März an und ich bereite mich mit einem empfohlenen Buch vor (Java for Kids. Wenn du eine bessere Empfehlung hast lass es mich bitte wissen. Und ja mein Ziel ist es damit beruflich weiterzukommen.


----------



## Purgator (27. Jan 2011)

```
import javax.swing.JOptionPane;

public class Test {
	
	public static void main(String[] args) {
		String message = "<html>Ihre Lottozahlen:<br>";
		for (int i = 1; i <= 6; i++) {
			message += i + ".: " + ((int) (Math.random() * 49) + 1) + "<br>";
		}
		JOptionPane.showMessageDialog(null, message);
	}
}
```
Anzumerken ist, dass Zahlen doppelt vorkommen können.
Ausserdem glaube ich nciht, dass dir meine Lösung groß weiterhilft. Denn wenn du nicht wusstest wo was hingehört, hätte es wahrscheinlich mehr geholfen zu zeigen was du versucht hast und gesagt zu bekommen warum das falsch war .
Aber um ganz ehrlich zu sein weiß ich jetzt auch nicht so groß wo man da was mit der Reihenfolge durcheinander bringen kann.


----------



## Cyston (28. Jan 2011)

Super danke dir.

Ich hab das total falsch eingefügt. Mir ist jedoch aufgefallen, dass du den html-tag nicht geschlossen hast. Scheint aber keine grosse Auswirkung zu haben. Ich werde mal versuchen es in andere Übungen einzufügen. Danke nochmal für die Hilfe.


----------



## Cola_Colin (28. Jan 2011)

Wenn man nur Zeilenumbrüche will, kann man auch mit einem schlichten "\n" für den Zeilenumbruch auskommen ?
Braucht man keine anderen html-Tags drummachen.


----------



## Purgator (28. Jan 2011)

Mhh ja, geht auch.
Da habe ich wohl unnötig kompliziert gedacht.


----------



## Andi_CH (31. Jan 2011)

Cola_Colin hat gesagt.:


> Wenn man nur Zeilenumbrüche will, kann man auch mit einem schlichten "\n" für den Zeilenumbruch auskommen ?



Womit allerdings die Portabilität eingeschränkt wird ...

das da ist sicherer


```
final String nl= System.getProperty("line.separator");

  String blabla = "Hello" + nl + "World" + nl;
```


----------



## Cola_Colin (31. Jan 2011)

Sicher, dass das wirklich eine Rolle spielt ?
\n ist ja eigentlich nicht für Windows und trotzdem funktioniert es auch unter Windows. Dachte immer, dass
es eben vom JLabel verarbeitet wird, unabhängig vom OS.


----------



## Andi_CH (31. Jan 2011)

Ich weiss ehrlich gesagt nicht was JLabel macht - es kann sehr wohl sein, dass es das macht was du sagst - weiss es wer verbindlich?


----------



## LP_SE (31. Jan 2011)

\n funktioniert unter allen OS. Ist ja ein Java-String, welcher von Java-Komponenten (JLabel, JTextField usw.) verarbeitet wird. Das hat nichts mit dem OS zu tun.
Außerdem weiß ich aus eigener Erfahrung, dass es unter Win 2000, Xp, Vista und 7; Mac OSX 10; Ubuntu und Knoppix funktioniert.
HTML-Tags würde ich vielleicht verwenden, wenn man Strings für Webseiten oder Sonstiges exportieren möchte oder diese importiert.

Mfg


----------



## Tomate_Salat (1. Feb 2011)

Cola_Colin hat gesagt.:


> Sicher, dass das wirklich eine Rolle spielt ?



In diesem Falle wohl weniger. Aber Windows nutzt hier normal [c]\r\n[/c]. Was dabei rauskommt, wenn man nur \n verwendet, kann man sehen, wenn man eine solche Textdatei im normalen WindowsEditor öffnet....Man hat eine Zeile. 

Allerdings spielt es wohl wirklich keine Rolle, wenn man moderne Editoren Benutzt. Diese akzeptieren (oft) beides. 

Für Java-Componenten wurde ja bereits angesprochen: hier entscheidet wohl nicht das OS, wo ein Zeilenumbruch zu tätigen ist und wo nicht. 

Auf der sicheren Seite ist man, wenn man Andi_CH's post berücksichtigt.


----------

