JOptionPane return bei "Abbrechen"

Jaxor84

Mitglied
Hallo ihr Lieben,

Ich habe diese Methode:
Java:
public void rbDefekt_ActionPerformed(ActionEvent evt) {
    Object[] defektMessage = {"Bitte spezifizieren Sie den Defekt", defektGrund};
    JOptionPane defektPane = new JOptionPane( defektMessage, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
    defektPane.createDialog(null, "Eingabeaufforderung").setVisible(true);
    Object selected = defektPane.getValue();
    writeStatus("defekt", iAuswahl);
    writeGrund(defektGrund.getText(), iAuswahl);
    writeName("","", iAuswahl);
    writeLabels("defekt", defektGrund.getText(), "");
  }
Das funktioniert soweit auch so wie ich es mir vorgestellt habe. Ich habe nur ein Problem: Ich möchte differenzieren zwischen "es wurde 'okay' gedrückt" und "es wurde 'abbrechen' gedrückt". Soweit wird bei einem Klick auf das Kreuz des OptionPanes selected der Wert "null" zugewiesen, aber bei 'okay' und 'abbrechen' taucht es im debugger überhaupt nicht auf - und eine Differenzierung passiert schon gar nicht.
Gibt es etwas, das einen entsprechenden Wert gibt oder bekommt, je nach Button oder vielleicht eine andere Möglichkeit, das Problem zu lösen? Ich grübele schon lange und mir fällt keine wirklich praktikable Lösung ein.

Liebe Grüße und vielen Dank

Max
 
Beste Antwort
Da sagt die API-Doc das folgende:
Direct Use:
To create and use an JOptionPane directly, the standard pattern is roughly as follows:

Code:
JOptionPane pane = new JOptionPane(arguments);

     pane.set.Xxxx(...); // Configure
     JDialog dialog = pane.createDialog(parentComponent, title);
     dialog.show();
     Object selectedValue = pane.getValue();
     if(selectedValue == null)
       return CLOSED_OPTION;
     //If there is not an array of option buttons:
     if(options == null) {
       if(selectedValue instanceof Integer)
          return ((Integer)selectedValue).intValue();
       return CLOSED_OPTION;
     }
     //If there is an array of option buttons:
     for(int counter = 0, maxCounter = options.length...

Jaxor84

Mitglied
Vielen Dank für den Tipp mihe7, aber das hilft mir leider nicht weiter. Ich habe jetzt das:
Java:
 public void rbDefekt_ActionPerformed(ActionEvent evt) {
    Object[] defektMessage = {"Bitte spezifizieren Sie den Defekt", defektGrund};
    JOptionPane defektPane = new JOptionPane( defektMessage, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
    defektPane.createDialog(null, "Eingabeaufforderung").setVisible(true);
    Object selected = defektPane.getValue();
    if (selected instanceof Integer) {
      writeStatus("defekt", iAuswahl);
      writeGrund(defektGrund.getText(), iAuswahl);
      writeName("","", iAuswahl);
      writeLabels("defekt", defektGrund.getText(), "");
    } // end of if
   
  }
Aber leider wird die if-Schleife trotzdem ausgeführt, wenn ich im OptionPane auf "abbrechen" klicke. Habe ich eventuell da was falsch verstanden? Mein Ziel ist es, einen unterschiedlichen Code auszuführen, je nach dem ob "okay" oder "abbrechen" gedrückt wurde. Das Object "Selected" scheint bei mir auch keinen Wert zu bekommen, wenn ich "okay" oder "abbrechen" drücke - oder sehe ich das nur im debugger nichrt?

anm.: Mit der "CLOSED_OPTION" kann ich umgehen. Was ich brauche ist eine "CANCEL_OPTION".
 
K

kneitzel

Gast
@mihe7 hat Dir die Doku doch verlinkt.

Bei gtValue() findet sich:
Returns the value the user has selected. UNINITIALIZED_VALUE implies the user has not yet made a choice, null means the user closed the window with out choosing anything. Otherwise the returned value will be one of the options defined in this object.
Du hast ja den Dialog erstellt mit OK_CANCEL_OPTION. Daher kannst Du zurück bekommen:
When one of the showXxxDialog methods returns an integer, the possible values are:

  • YES_OPTION
  • NO_OPTION
  • CANCEL_OPTION
  • OK_OPTION
  • CLOSED_OPTION
Diese Konstanten kannst Du Dir alle ansehen, z.b. bei CANCEL_OPTION:
public static final int CANCEL_OPTION
Return value from class method if CANCEL is chosen.
Da Du es einem Object zuweist, wir der int als Integer abgespeichert (Boxing) und damit ist instanceof Integer natürlich wahr.
Soweit alles klar bezüglich der Dokumentation? Die wichtigen Elemente dürfte ich zitiert haben.
 

Jaxor84

Mitglied
Vielen Dank für die Erklärung, @kneitzel , aber ich fürchte mein Verständnisproblem ist viel grundlegender, aus der Dokumentation werde ich da auch nicht viel schlauer.
Ich verstehe nicht ganz, wie ich auf CANCEL_OPTION komme bzw. wo das herkommt.
Kannst du mir eventuell ein (rudimentäres) Code-Beispiel geben?
 

LimDul

Top Contributor
Zuletzt bearbeitet von einem Moderator:

LimDul

Top Contributor
Da sagt die API-Doc das folgende:
Direct Use:
To create and use an JOptionPane directly, the standard pattern is roughly as follows:

Code:
JOptionPane pane = new JOptionPane(arguments);

     pane.set.Xxxx(...); // Configure
     JDialog dialog = pane.createDialog(parentComponent, title);
     dialog.show();
     Object selectedValue = pane.getValue();
     if(selectedValue == null)
       return CLOSED_OPTION;
     //If there is not an array of option buttons:
     if(options == null) {
       if(selectedValue instanceof Integer)
          return ((Integer)selectedValue).intValue();
       return CLOSED_OPTION;
     }
     //If there is an array of option buttons:
     for(int counter = 0, maxCounter = options.length;
        counter < maxCounter; counter++) {
        if(options[counter].equals(selectedValue))
        return counter;
     }
     return CLOSED_OPTION;
Sprich, wenn null geliefert wird - dann wurde der Dialog mittels dem X verlassen.

Persönliche Meinung: Ich find das Code Stück aus der API-Doc gräßlich und schwer verdaulich und würde fast dazu plädieren in der Konstellation lieber einen eigenen Dialog zu basteln.

Aber wenn du dabei bleibst, wäre es bei dir:

Java:
 public void rbDefekt_ActionPerformed(ActionEvent evt) {
    Object[] defektMessage = {"Bitte spezifizieren Sie den Defekt", defektGrund};
    JOptionPane defektPane = new JOptionPane( defektMessage, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
    defektPane.createDialog(null, "Eingabeaufforderung").setVisible(true);
    Object selected = defektPane.getValue();
    if (selected == null) {
       // Dialog wurde über X verlassen
    }
    if (selected instanceof Integer) {
      // dialog wurde über ((Integer)selected).intVal() verlassen
      // Entweder JOptionaPane.OK_OPTION oder JOptionPane.CANCEL_OPTION
      writeStatus("defekt", iAuswahl);
      writeGrund(defektGrund.getText(), iAuswahl);
      writeName("","", iAuswahl);
      writeLabels("defekt", defektGrund.getText(), "");
    } // end of if
   
  }
 
Beste Antwort

LimDul

Top Contributor
Naja darüber:
Java:
      // dialog wurde über ((Integer)selected).intVal() verlassen
      // Entweder JOptionaPane.OK_OPTION oder JOptionPane.CANCEL_OPTION
Entweder ist der intVal() == JOptionaPane.OK_OPTION oder halt gleich der CANCEL_OPTION (Das sind jeweils nur Konstanten)
 

Jaxor84

Mitglied
Das ist erstmal genau das, was ich gesucht habe, vielen Dank!
Jetzt bekomme ich allerdings den Fehler "cannot find symbol" für intVal(). Muss ich noch irgendwas importieren?
 

LimDul

Top Contributor
Der Code war nur ein Ausschnitt. Du musst selected auf einen Integer casten und dann auf dem Objekt die Methode intValue() nicht intVal() aufrufen (Tippfehler meinerseits). Etwas mitdenken ist schon notwendig :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JOptionPane zeigt nicht an was ich will AWT, Swing, JavaFX & SWT 2
A JOptionPane OK ohne Eingabe abfangen AWT, Swing, JavaFX & SWT 10
senol JOptionPane hilfe!!! :(((( AWT, Swing, JavaFX & SWT 32
J JOptionPane ruft sich selbst immer wieder neu auf AWT, Swing, JavaFX & SWT 3
R JOptionPane schließt sich nicht wieder AWT, Swing, JavaFX & SWT 2
O Swing JOptionPane.showOptionDialog - Wie kann ich Buttons größer machen AWT, Swing, JavaFX & SWT 10
O Timer in JOptionPane anzeigen AWT, Swing, JavaFX & SWT 2
Z Swing JOptionPane import AWT, Swing, JavaFX & SWT 5
R Swing JOptionPane Sprache Ändern AWT, Swing, JavaFX & SWT 4
O JOptionPane mit JFileDialog AWT, Swing, JavaFX & SWT 5
dereki2000 JPanel mit Rückgbe wie bei JOptionPane AWT, Swing, JavaFX & SWT 3
T JavaFX JFrame verhalten wie JOptionPane (ErrorMessage) AWT, Swing, JavaFX & SWT 1
I JOptionPane maximale Zeichen einstellen AWT, Swing, JavaFX & SWT 2
N Swing Mocken von JOptionPane im JUnit-Test AWT, Swing, JavaFX & SWT 3
R Ausgabe über JOptionPane.showMessageDialog funktioniert nicht AWT, Swing, JavaFX & SWT 2
W JOptionPane AWT, Swing, JavaFX & SWT 1
T JOptionPane Dialog plus Rechnung ausgeben AWT, Swing, JavaFX & SWT 1
snipesss Hintergrundbild in JOptionPane.showInputDialog? AWT, Swing, JavaFX & SWT 4
R Swing JOptionPane Fehlermeldung- bitte um Hilfe! AWT, Swing, JavaFX & SWT 4
J Event Handling JOptionPane ActionListener setzen. AWT, Swing, JavaFX & SWT 3
A Swing JOptionPane.showConfirmDialog, EventQueue wird weiter abgearbeitet AWT, Swing, JavaFX & SWT 2
C JOptionPane.showConfirmDialog() -> Focus auf NEIN -> Enter gibt YES_OPTION zurück AWT, Swing, JavaFX & SWT 6
T JOptionPane Enter = Okay AWT, Swing, JavaFX & SWT 3
OnDemand JOptionPane AWT, Swing, JavaFX & SWT 2
B JFrame wie JOptionPane.showMessageDialog() AWT, Swing, JavaFX & SWT 2
D Swing JOptionPane verschwindet beim 2. Aufruf einfach so?? AWT, Swing, JavaFX & SWT 2
L Swing JOptionPane Verwirrung AWT, Swing, JavaFX & SWT 13
P JOptionPane input und show Message Dialog AWT, Swing, JavaFX & SWT 5
I javascript in javaprogramm JOptionpane -> haengt (embedded Interpreter) AWT, Swing, JavaFX & SWT 2
S JOptionPane sinnvoll benutzen AWT, Swing, JavaFX & SWT 7
J JOptionPane mit zwei Buttons?! AWT, Swing, JavaFX & SWT 3
D JOptionPane.QUESTION_MESSAGE Fett darstellen AWT, Swing, JavaFX & SWT 4
N JOptionPane als JWindow AWT, Swing, JavaFX & SWT 2
M Swing Änderungen eines TextFelds und JOptionPane AWT, Swing, JavaFX & SWT 5
O JOptionPane.showMessageDialog mit automatischem Zeilenumbruch AWT, Swing, JavaFX & SWT 9
E Swing setCaretPosition für ein JTextField in einem JOptionPane AWT, Swing, JavaFX & SWT 3
H Swing JOptionPane.showConfirmMessage() wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
R JOptionPane.YES_NO_CANCEL_OPTION im SaveDialog verwenden AWT, Swing, JavaFX & SWT 6
U JFrame minimiert nach JDialog, JOptionPane AWT, Swing, JavaFX & SWT 3
R Eingegebenen Text in JOptionPane in andere Klasse weitergeben AWT, Swing, JavaFX & SWT 2
M JOptionPane.showInputDialog abbrechen abfangen? AWT, Swing, JavaFX & SWT 2
Weiti JOptionPane aus einer von JPanel abgeleiteten Klasse aufrufen AWT, Swing, JavaFX & SWT 3
N OK-Button in JOptionPane ansprechen AWT, Swing, JavaFX & SWT 5
D Swing JOptionPane + FileChooser .. Reihenfolge wichtig!? AWT, Swing, JavaFX & SWT 7
G Swing Meldung mit joptionpane information message AWT, Swing, JavaFX & SWT 22
B Swing JOptionPane ohne beep AWT, Swing, JavaFX & SWT 6
A Swing \t im JOptionPane AWT, Swing, JavaFX & SWT 2
G JOptionPane.showConfirmDialog size problem AWT, Swing, JavaFX & SWT 3
S JOptionPane - InitialValue AWT, Swing, JavaFX & SWT 9
S JOptionPane resultat kriegen AWT, Swing, JavaFX & SWT 7
ABstraCT JOptionPane setSize ? AWT, Swing, JavaFX & SWT 6
S JOptionPane.showInputDialog JList erzwingen? AWT, Swing, JavaFX & SWT 4
SebSnake JFrame "Focus" erzwingen (wie JOptionPane) AWT, Swing, JavaFX & SWT 3
G JOptionPane.showInputDialog(): Texteingabe und Fokus AWT, Swing, JavaFX & SWT 3
A Array wird im JOptionPane mehrfach ausgegeben AWT, Swing, JavaFX & SWT 3
A JOptionPane soll auf Enter reagieren AWT, Swing, JavaFX & SWT 4
F JOptionPane.showMessageDialog AWT, Swing, JavaFX & SWT 2
M JOptionPane.showMessageDialog() mit printStackTace() ? AWT, Swing, JavaFX & SWT 7
QDog JTabbedPane JOptionPane AWT, Swing, JavaFX & SWT 2
K Tabelle nach JOptionPane updaten AWT, Swing, JavaFX & SWT 5
A JOptionPane; CLOSED_OPTION ausschalten AWT, Swing, JavaFX & SWT 5
A Probleme mit einer JOptionPane in einem jar-File AWT, Swing, JavaFX & SWT 14
Z JOptionPane mit einer Methode in dem Vordergrund setzen? AWT, Swing, JavaFX & SWT 6
J JOptionPane Tabs AWT, Swing, JavaFX & SWT 3
G JOptionPane mit andere Farbe AWT, Swing, JavaFX & SWT 8
B Ein JOptionPane.showMessageDialog(.) AWT, Swing, JavaFX & SWT 6
G komplexes JOptionPane (oder doch JFrame?) AWT, Swing, JavaFX & SWT 2
G JOptionPane mit link zum anklicken AWT, Swing, JavaFX & SWT 4
G JOptionPane AWT, Swing, JavaFX & SWT 6
N Probleme mit eigenem JOptionPane AWT, Swing, JavaFX & SWT 2
A Schließen eines JOptionPane.showConfirmDialog AWT, Swing, JavaFX & SWT 6
B JOptionPane.showInputDialog mit drei ComboBoxen nebeneinande AWT, Swing, JavaFX & SWT 2
S JTextField und JOptionPane - Zeicheneingabe beschränken AWT, Swing, JavaFX & SWT 3
G JOptionPane AWT, Swing, JavaFX & SWT 3
eskimo328 JOptionPane ohne CANCEL Button AWT, Swing, JavaFX & SWT 2
M JOptionPane.showConfirmDialog. Frage zur Cancel_Option AWT, Swing, JavaFX & SWT 2
L JOptionPane AWT, Swing, JavaFX & SWT 4
P JComboBox.addItem erzeugt Layoutproblem mit JOptionPane AWT, Swing, JavaFX & SWT 2
J eigenes JOptionPane ? AWT, Swing, JavaFX & SWT 2
J JOptionPane Buttons AWT, Swing, JavaFX & SWT 4
G Eingabe auslesen mit JOptionPane AWT, Swing, JavaFX & SWT 2
vogella JOptionPane in den Vordergrund bringen AWT, Swing, JavaFX & SWT 2
padde479 JOptionPane AWT, Swing, JavaFX & SWT 3
C Probleme beim Serialisieren mit JOptionPane AWT, Swing, JavaFX & SWT 12
S JOptionPane: methode ShowConfirmDialog ist undefiniert AWT, Swing, JavaFX & SWT 2
S JOptionPane und eine feste Zeilenbreite. AWT, Swing, JavaFX & SWT 4
S JProgressBar zu JOptionPane hinzufügen. AWT, Swing, JavaFX & SWT 8
G JOptionPane AWT, Swing, JavaFX & SWT 3
B Eingabeüberprüfung beim JOptionPane.showInputDialog() AWT, Swing, JavaFX & SWT 3
D Mit JOptionPane einen Link darstellen AWT, Swing, JavaFX & SWT 10
S JOptionPane.showMessageDialog(.) AWT, Swing, JavaFX & SWT 23
S Ein frage zu JOptionPane AWT, Swing, JavaFX & SWT 2
H wie frage ich mehrere buttons von joptionpane ab AWT, Swing, JavaFX & SWT 4
G Link in JoptionPane? AWT, Swing, JavaFX & SWT 3
N JOptionPane mit Html Tags AWT, Swing, JavaFX & SWT 5
B Focus in JOptionPane AWT, Swing, JavaFX & SWT 2
M Ausgabe mit JOptionPane AWT, Swing, JavaFX & SWT 6
U kleiner-Zeichen JEditorPanel (war: JOptionPane) AWT, Swing, JavaFX & SWT 5
S JOptionPane in den Bildschirmvordergrund bringen AWT, Swing, JavaFX & SWT 3
F JOptionPane soll nicht auf ENTER reagieren AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben