# showInputDialog anfängerfragen =D



## jannis95 (10. Dez 2009)

Hallo Forum!

Wir lehrnen java in der schule und ich war eine woche lang krank... hab schon fast alles nachgeholt komm aber bei einem punkt nicht weiter.

Die Aufgabe ist:

Testen Sie eine eingegebene ganze Zahl ob sie durch 2,3 oder durch 5 teilbar ist und geben Sie eine entsprechende Information aus.
Wiederholen Sie die Eingabe solange bis der Benutzer keine weitere Zahl nehr eingeben möchte.

ok, so weit bin ich gekommen...

```
import javax.swing.JOptionPane;
/**
 * Write a description of class Teilbarkeit1 here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Teilbarkeit1{
   
    public static void main(String[] args){
        
        int zahl;

        boolean endlos = true; 
        
        while (endlos){ 
        
            zahl = Integer.parseInt(JOptionPane.showInputDialog("Dieses Programm stellt die Teilbarkeit von 2,3 oder 5 fest.","Bitte gib eine ganze Zahl ein"));

            if (zahl % 2 == 0){
                System.out.println ("Die eingegebene Zahl "+zahl+" ist dur 2 Teilbar!");
            }
        
            if (zahl % 3 == 0){
                System.out.println ("Die eingegebene Zahl "+zahl+" ist dur 3 Teilbar!");
            }
        
            if (zahl % 5 == 0){
                System.out.println ("Die eingegebene Zahl "+zahl+" ist dur 5 Teilbar!");
            }    
        
            if (zahl % 2 != 0 && zahl % 3 != 0 && zahl % 5 != 0){
                System.out.println ("Die eingegebene Zahl "+zahl+" ist weder durch 2 noch duch 3 oder 5 Teilbar!");
            }
            System.out.println ("");
        }
        System.exit(0);
    }
}
```

es funktioniert eingentlich soweit...

nun meine frage:
Gibt es eine Möglichkeit  den Abbrechen Button bei der eingabe Umbennenen, das es "Keine weitere Zahl eingeben" heißt
Wenn nicht macht das auch nichts

Was noch viel wichtiger ist, wie stell ich es an, dass das programm beim drücken des buttons beendet wird.

Und eine dritte frage:
Wie kann ich eine fehlermedung ausgeben wenn kein gültiger wert eingegäben wird. z:B.: a oder 2.2


----------



## Arbon (10. Dez 2009)

Zu 1)
How to Make Dialogs (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)

Zu 2)
Ein InputDialog gibt null zurück, wenn abbrechen gedrückt wird. Dann mit break aus der Schleife springen

Zu 3)
Integer.parseInt wirft eine NumberFormatException, falls der Wert nicht konvertierbar ist. Die musst du mit try catch fangen und dann eine entsprechende Meldung ausgeben, z.B. mit JOptionPane.showMessageDialog(...);. Dann am besten mit continue die Schleife wiederholen lassen.


----------



## jannis95 (10. Dez 2009)

Hallo
alls erstes: DANKE hab glaub ich noch nie so schnell eine antwort in einem forum bekommen...
aber ich bekomms trotzdem nicht hin :-(

1.) es wird zwar eine Möglichkeit beschrieben aber ich bekomm das irgendwie nicht hin. dennen zuvollge müsste das so ähnlich aussehen:


```
options = {"OK", "Keine weitere Zahl eingäben"};
int zahl = Integer.parseInt(JOptionPane.showInputDialog(frame,
    "Dieses Programm stellt die Teilbarkeit von 2,3 oder 5 fest.?",
    "Bitte gib eine ganze Zahl ein",
    JOptionPane.YES_NO_OPTION,
    JOptionPane.QUESTION_MESSAGE,
    null,     //do not use a custom Icon
    options,  //the titles of buttons
    options[0]); //default button title
```

ich komm sonst gut mit java zurech... das JOption und so hab ich noch nicht ganz verstanden...

2.)Wie genau würde das ausehen?

3.) wie fang ich einen wert mit try catch

Bin noch ein ganschöner Anfänger...

Danke


----------



## Arbon (10. Dez 2009)

Ok grade nochmal nachgesehen, bei einem InputDialog ist es nicht möglich die Texte der Buttons zu ändern. Da musst du einen eigenen Dialog erstellen mittels dem showOptionDialog und um das benötigte Textfeld zur Eingabe musst du dich selbst kümmern.
Sieht dann so aus:

```
while (true) {
			JTextField txt = new JTextField();
			String[] options = { "OK", "Keine weitere Zahl eingäben" };
			Object[] objects = { "Zahlen eingeben", txt };
			int ret = JOptionPane.showOptionDialog(this, objects, "Eingabe",
					JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
					null, options, null);
			if (ret != JOptionPane.OK_OPTION) {
				// abrechen gedrückt
				break;
			}
			String s = txt.getText();
			try {
				Integer.parseInt(s);
			} catch (NumberFormatException e) {
				// ungültige Zahl
				JOptionPane.showMessageDialog(this,
						"Ungültige Zahl eingegeben " + s);
				continue;
			}
		}
```

Das Abbrechen und die neue Eingabe bei einer ungültigen Zahl habe ich auch eingebaut. Mit einem InputDialog würde es ähnlich gehen:


```
String s = JOptionPane.showInputDialog(this, "Zahlen eingeben");
			if (s == null) {
				// abrechen gedrückt
				break;
			}
			try {
				Integer.parseInt(s);
			} catch (NumberFormatException e) {
				// ungültige Zahl
				JOptionPane.showMessageDialog(this,
						"Ungültige Zahl eingegeben " + s);
				continue;
			}
```
Aber wie gesagt, die Texte der Buttons kannst du damit nicht beeinflussen.


----------

