2011-01-05 1 views
1

Hier ist meine Frage mit einem kurzen Beispielcode:Wie weisen Sie der ("Cancel") Schaltfläche innerhalb von (JOptionPane.showInputDialog) in Java eine eigene Aktion zu?

double num = 0.00; 

try 
{ 
    num = Double.parseDouble(JOptionPane.showInputDialog("Enter your num:")); 

} 

catch (Exception e) 
{ 
    System.err.println("Error: Invalid Input!"); 
    JOptionPane.showMessageDialog(null, "Error: Invalid Input!", 
    "Error", JOptionPane.ERROR_MESSAGE); 
} 

//Validate the num 

if (num > 0.0 && num <= 1000.00) 
{ 
    functionA(); 
} 

else if (deposit <= 0.0 || deposit > 1000.00) 
{ 
System.err.println("Error: out of range"); 
} 

* Das Problem mit dem obigen Code ist, dass, wenn ich die auf „Abbrechen“ klicken, wird das Programm sowohl Fehler schlagen: (die sich außerhalb der Reichweite und die ungültige Eingabe).

Bitte irgendwelche Vorschläge, wie ich das beheben kann?

Vielen Dank im Voraus

Antwort

4

Zuerst müssen Sie überprüfen, ob die Eingabe null ist. Wenn nicht, dann verwenden Sie parseDouble.

So:

try 
{ 
    String i = JOptionPane.showInputDialog("Enter your num:"); 
    if (i != null) 
     num = Double.parseDouble(i); 
} 

Versuchen Sie auch, keine Ausnahmen zu fangen, indem sie "Exception", wie Sie haben. Versuchen Sie immer, die gesuchte Ausnahme so weit wie möglich anzugeben. In diesem Fall sollten Sie NumberFormatException anstelle von Exception verwenden.

catch (NumberFormatException e) 
{ 
    System.err.println("Error: Invalid Input!"); 
    JOptionPane.showMessageDialog(null, "Error: Invalid Input!", 
    "Error", JOptionPane.ERROR_MESSAGE); 
} 
+1

Vielen Dank! Kristallklar. – CompilingCyborg

+0

Während diese Vorschläge das Problem beheben, dass der Benutzer auf Abbrechen klickt, beheben sie nicht das Problem, dass der Benutzer eine Bereichsüberschreitung für das Drücken von Abbrechen oder nach dem Abfangen einer Zahlenformat-Ausnahme erzwingt. Darf ich vorschlagen, den Validierungscode in die if-Anweisung innerhalb des try-Blocks zu verschieben. – LINEMAN78

1
package org.life.java.so.questions; 

import java.text.ParseException; 
import javax.swing.JOptionPane; 

/** 
* 
* @author Jigar 
*/ 
public class InputDialog { 

    public static void main(String[] args) throws ParseException { 
     String input = JOptionPane.showInputDialog("Enter Input:"); 
     if(input == null){ 
      System.out.println("Calcel presed"); 
     }else{ 
      System.out.println("OK presed"); 
     } 


    } 
} 
+0

Ich sehe gerne vollständige Codebeispiele. Ihnen geht es besonders gut. Aber könnte ich eine "Bürgeranfrage" machen? Entfernen Sie die redundanten Leitungen. Die 4 oben sind außerhalb der IDE unsinnig. Die zweite Zeile des zweiten Kommentars fügt nichts hinzu. Die 2 Leerzeilen am Ende von main fügen ebenfalls keinen Wert hinzu. Das Entfernen dieser Linien würde die E.G. von 26 auf nur 19 Zeilen - eine vertikale Einsparung von etwa 25%. Für Personen mit großen Monitoren ist dies möglicherweise nicht relevant, aber für ältere Monitore mit kleineren Auflösungen ist es einfacher, das gesamte Beispiel auf einem einzigen Bildschirm anzuzeigen. Danke, dass Sie es in Betracht gezogen haben. –

+0

@Andrew Thompson Betrachtet :) –

Verwandte Themen