jOptionPane mit if else

maGG

Bekanntes Mitglied
Huhu ich bins wieder :D *winke winke*
Ich würde gern ein JOptionPane Fenster erzeugen, welches in einer Combobox verschiede Strings zur Auswahl hat und ein Ok und Cancel Button besitzt. Das ist mein bisheriger Code:
Java:
 Object[] possibleValues = { "First", "Second", "Third" };

Object selectedValue = JOptionPane.showInputDialog(null,
             "Choose one", "Input",
             JOptionPane.OK_CANCEL_OPTION, null,
             possibleValues, possibleValues[0]);
Was ich jetzt möchte ist so etwas:
Code:
if(First ist ausgewählt && Objekt == OK_OPTION){
     mach etwas
}else if (Second ...){
     ...
} else if(Third ...){
     ...
}else{}
Das Problem dabei ist, dass OK_OPTION vom Typ int ist und das andere ein Object Array. Wie vergleiche ich so etwas? Ich habs mit .equals(), .contains() und mit so nem Array.iwas ausprobiert. Ich hab mit if else leider nur einfache Beispiele mit YES_NO_OPTION gefunden, die bekomme ich auch hin. Das mit Object scheint schwieriger zu sein oder? Habt ihr vielleicht ne Idee wie man sowas macht?

MfG
 

Robat

Top Contributor
Warum hast du ein Object Array und kein String Array? Sind doch alles Strings oder?

Im Prinzip musst du nicht prüfen ob Cancel oder Ok gedrückt wurde.
Immer dann, wenn der User OK drückt, wird der Eintrag der Combobox zurückgegeben und in selectedValue gespeichert. Wenn der User Cancel drückt wird null zurückgegeben.
Du kannst also schauen ob selectedValue null ist oder nicht und dann mit equals() weiter machen.

Java:
String selectedValue= (String) JOptionPane.showInputDialg(....);
if(selectedValue == null)
{
     // cancel button gedrückt
     // some fancy stuff
}
else if(selectedValue.equals("bla"))
{
      // foo
}
else
{
       // ....
}

Gruß Robert
 

JStein52

Top Contributor
Ist es vielleicht sowas was du willst:
Code:
String[] genderOptions = {
  "männlich", "weiblich", "keine Ahnung", "ändert sich ständig" };

String gender = (String) JOptionPane.showInputDialog( null,
          "Geschlecht",
          "Bitte das Geschlecht wählen (eigenes, nicht gewünschtes)",
          JOptionPane.QUESTION_MESSAGE,
          null, genderOptions,
          genderOptions[1] );

Edit: Uups, zu spät
 

Joose

Top Contributor
Das er null ausgibt bei X und bei Cancel wusste ich nicht
Da hilft immer wieder ein Blick in die Dokumentation ;)
https://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html#showInputDialog(java.awt.Component,%20java.lang.Object,%20java.lang.String,%20int,%20javax.swing.Icon,%20java.lang.Object[],%20java.lang.Object)
Da steht beschrieben was die einzelnen Parameter bedeuten/sind und mit welchen Rückgabewert (falls vorhanden) man rechnen kann.
 

maGG

Bekanntes Mitglied
Auch dir auch Danke Joose!
Ich hab noch was hehe *Trommelwirbel* :D
Ich würde gern folgendes umsetzen, sofern nicht zu aufwändig bzw. überhaupt möglich: Es soll ein JOptionPane-Fenster ausgeben, mit eine Combobox. Die Combobox soll dann als Startwert den String ausgewählt haben der bei einer anderen Combobox im jFrame bereits ausgewählt wurde - die anderen Werte sollen noch auswählbar sein und die beiden Comboboxen sind soweit gleich, von ihren String Werten.
Java:
        Object[] possibleValues = {"AG", "Training", "Austria GmbH - AT", "CEF - AT", "B.V. - NL", "Polska - PL", "Sarl - FR", "G.L.S. - UK", "Corporation - USA", "Ltd. - CH"};
        Object selectedValue = JOptionPane.showInputDialog(null, "wähle eine Vorlage:", "Vorlage erstellen",
        JOptionPane.OK_CANCEL_OPTION, null,
        possibleValues, possibleValues[0]);

        public String getBereich(){
            String bereich = jComboBoxBereich.getSelectedItem().toString();
            return bereich;
        }
Hmmm bzw. eigentlich müsste ich den ausgewählt String dann nach vorne setzen, oder vielleicht entfernen und dann hinzufügen? Vielleicht geht das eher mit ArrayList, habt ihr ne Idee evtl.?
 

JStein52

Top Contributor
Mhmmm, ich verstehe noch nicht was du vorhast bzw. was das Problem ist. In possibleValues stehen die Alternativen und im letzten Parameter beim showInputDialog gibst du an welcher dieser Werte vorausgewählt sein soll. Ich verstehe nicht was du warumnach vorne oder hinten setzen willst
 

maGG

Bekanntes Mitglied
Hmm also es geht immer noch um das Programm zur Erstellung von Signaturen. Dabei gibt es inzwischen ziemliche viele Parameter, die übergeben werden (es werden immer mehr *augenroll*). Eine Abfrage erfolgt durch die ComboBox Bereich, welche das Äquivalent zu einer Schablone wäre: Je nachdem welche man auswählt sieht der Aufbau der Signatur unterschiedlich aus. Das Programm soll eine Hilfestellung sein die 99% aller Fälle abdecken. Da es aber immer Spezialisten geben wird, die eine ganz besondere Signatur brauchen, wäre eine Ausgabe ohne Parameter hilfreich - dafür ist das JOptionPane-Fenster.

Wenn ich jetzt das Programm benutze und gerade im Bereich "Training" drin bin und mir einfällt, dass ich jetzt auch noch gerne eine Vorlage geschrieben bekommen würde, dann würde ich auf den Button drücken und das Programm hätte automatisch schon die Combobox auf Training gesetzt. Natürlich ist das jetzt nicht besonders wichtig. Aber ich dachte mir, wenn ich weiß wie das funktioniert dann könnte ich noch andere coole Sachen machen.
Beispielsweise dachte ich daran bei der zip Funktion etwas zu erweitern. Im Moment zippt er ja den Ordner, der den String Namen = vorname + " " + nachname; trägt und auf den Desktop liegt. D.h. um das Programm so zu benutzen wäre es ideal, wenn man immer erst die Signatur ertellt und dann sofort zippt, bevor man eine neue eingibt.
Es wäre natürlich jetzt cool, wenn ich eine String ArrayList hätte, die immer nach Erstellen einer Signatur den Werte vorname + " " + nachname als Element der hinzufügt mit add. Und das diese ArrayList dann in der Combobox bei JOptionPane auftaucht. Also sagen wir ich hätte gerade die Signatur für Max Mustermann, Anna Musterfrau und Emil Schießmichtot erstellt und würde dann auf den Button zum zipp drückenn, dann würde zur Auswahl zum zippen eben diese drei String Werte zu verfügung stehen. Wenn keine Signatur davor erstellt wurde, dann würde er mir eben ne Fehlermeldung ausgeben.

So hatte ich mir das grob vorgestellt. Weiterhin hatte ich dann noch an eine optische Anwendung gedacht, z.B. das man zusätzlich noch eine Art Liste auf ein Panel z.B. angezeigt bekommt mit den letzt drei erstellten Signaturen, die dann immer wieder überschrieben wird.

Naja egal zurück zum Thema: Wenn ich also wüsste wie man die Werte in bei JOptionPane variable mache, dann würde mir das schon mal weiterhelfen. Und ich könnte mir noch mehr Gedanken dazu machen, wie man sowas überhaupt umsetzen könnte.

sry für den langen Text :D
 

maGG

Bekanntes Mitglied
nö weiß ich irgendwie nicht :D
Java:
        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
Es zeigt mir die Zeilen mit add als rot an. Ich bin irgendwie verwirrt; im Internet stand das als Beispielt und es hat anscheinend funktioniert - bei mir nicht. ArrayList besteht doch aus Klassen oder?
 

JStein52

Top Contributor
Zwei Alternativen:
Code:
        Object[] possibleValues = new String[4];
        possibleValues[0] = "der erste String";
        possibleValues[1] = "der zweite String";
        possibleValues[2] = "der dritte String";   // der soll vorselektiert sein.
        possibleValues[3] = "der vierte String";
        Object selectedValue = JOptionPane.showInputDialog(null, "wähle eine Vorlage:", "Vorlage erstellen",
                JOptionPane.OK_CANCEL_OPTION, null,
                possibleValues, possibleValues[2]);

        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        selectedValue = JOptionPane.showInputDialog(null, "wähle eine Vorlage:", "Vorlage erstellen",
                JOptionPane.OK_CANCEL_OPTION, null,
                list.toArray(), list.toArray()[2]);

Beides geht,
 

maGG

Bekanntes Mitglied
ah cool Danke JStein! :) Es funktioniert jetzt fast perfekt. Wie kann ich von meinem String Array den Index als Bedingung angeben?

also wenn ich ...
switch(selectedValue){
case "index vom Array":
//mach irgendetwas
break;
}

und es soll eigentlich auch noch soviele cases erstellen, wie elemente in der arraylist sind, so etwa vielleicht?
Java:
        for(int i = 0; i < list.toArray().length; i++){
            if(null == selectedValue){
                jTextAreaAusgabe.setText("der Cancel Button oder X müsste gedrückt worden sein");
            }else switch(selectedValue){
                case i:
                    //mach etwas
                break;
                default:
                    //mach etwas
                break;
            }
        }
Das mit dem i funktioniert so natürlich noch nicht.
 

JStein52

Top Contributor
Wenn du die Alternative mit der ArrayList benutzt kannst du den Index des selektierten Elementes erfargen. So etwa:
Code:
        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        selectedValue = JOptionPane.showInputDialog(null, "wähle eine Vorlage:", "Vorlage erstellen",
                JOptionPane.OK_CANCEL_OPTION, null,
                list.toArray(), list.toArray()[2]);
        int index = list.indexOf(selectedValue);
und dann irgendwas mit dem Index machen. Hilft das weiter ?

Bei der Variante mit dem String-Array musst du halt selber eine Schleife drumrum machen und mit ...equals(selectedValue) rausfinden welcher Eintrag selektiert war.
 

maGG

Bekanntes Mitglied
Im Moment sieht es so aus:
Java:
        list.add("Max Mustermann");
        list.add("Vorname Nachname");
        list.add("Bin Unkreativ");
        list.add("Und Wie");
        String selectedValue = (String)JOptionPane.showInputDialog(null, "wähle eine Vorlage:", "Vorlage erstellen",
                JOptionPane.OK_CANCEL_OPTION, null,
                list.toArray(), list.toArray().length);
       
        for(int i = 0; i < list.toArray().length; i++){
            if(null == selectedValue){
                jTextAreaAusgabe.setText("der Cancel Button oder X müsste gedrückt worden sein");
            }else switch(list.indexOf(selectedValue)){
                case list.get(i):
                    //mach etwas
                break;
                default:
                    //mach etwas
                break;
            }
        }
kann man das so machen? Das mi dem list.get(i) ist noch rot
 

Joose

Top Contributor
kann man das so machen? Das mi dem list.get(i) ist noch rot

Nein das geht nicht. Ein "case" braucht einen konstanten Wert.
Java:
list.add("Max Mustermann");
list.add("Vorname Nachname");
list.add("Bin Unkreativ");
list.add("Und Wie");
String selectedValue = (String)JOptionPane.showInputDialog(null, "wähle eine Vorlage:", "Vorlage erstellen", JOptionPane.OK_CANCEL_OPTION, null, list.toArray(), list.toArray().length);

if(null == selectedValue) {
   jTextAreaAusgabe.setText("der Cancel Button oder X müsste gedrückt worden sein");
} else {
   for(int i = 0; i < list.size(); i++) {
       if(selectedValue == list.get(i)) {
           // was auch immer dann passieren soll
           // wozu aber willst du es so machen? selectedValue enthält ja schon den ausgewählten wert!?
       }
   }
}

Und noch ein Hinweis das was du hier probiert hast:
Code:
for(int i = 0; i < list.toArray().length; i++){
   if(null == selectedValue) {
       jTextAreaAusgabe.setText("der Cancel Button oder X müsste gedrückt worden sein");
   } else
       switch(list.indexOf(selectedValue)) {
           case list.get(i):
               //mach etwas
           break;
           default:
               //mach etwas
           break;
       }
}
is nichts anderes als ein if/else, wobei die switch-Anweisung im else-Block steht (achte auf die Formatierung deines Codes).
Bei nur einer Anweisung in einem if oder else Block braucht man keine {}-Klammern (ich empfehle sie trotzdem immer zu machen.
 

maGG

Bekanntes Mitglied
Ok danke; es funktioniert jetzt perfekt. Danke nochmal!
Meine Lösung sieht jetzt so aus:
Java:
    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {        
if(!list.isEmpty()){
           
            Collections.reverse(list); //ändert die Reihenfolge
            String selectedValue = (String)JOptionPane.showInputDialog(null, "wähle eine Vorlage:", "Vorlage erstellen",
                    JOptionPane.OK_CANCEL_OPTION, null,
                    list.toArray(), list.toArray().length);
            if(!(selectedValue == null)){
                try{
                    String homeDirectory = new JFileChooser().getFileSystemView().getHomeDirectory().toString();

                    String dir = homeDirectory + "\\" + selectedValue;
                    String pfadBat = homeDirectory + "\\" + selectedValue + "\\" + "Signatur.bat";
                    String pfadHtm = homeDirectory + "\\" + selectedValue + "\\" + selectedValue + ".htm";
                    String pfadTxt = homeDirectory + "\\" + selectedValue + "\\" + selectedValue + ".txt";
                   
                    FileOutputStream fos = new FileOutputStream(dir + ".zip");
                    try (ZipOutputStream zos = new ZipOutputStream(fos)) {
                        addDir(zos, pfadBat);
                        addDir(zos, pfadHtm);
                        addDir(zos, pfadTxt);
                    }
                    jTextAreaAusgabe.setText("Der Zip-Ordner wurde erfolgreich auf dem Desktop erstellt.");

                }catch(FileNotFoundException ep){
                    ep.printStackTrace();
                    jTextAreaAusgabe.setText("Fehler: Pfad konnte nicht gefunden werden");
                }catch(IOException ex) {
                    ex.printStackTrace();
                    jTextAreaAusgabe.setText("Fehler: Speichervorgang abgebrochen");
                }
            }else{
                jTextAreaAusgabe.setText("Der Kompremiervorgang wurde nicht ausgeführt.");
            }      
        }else{
            jTextAreaAusgabe.setText("Fehler: Bitte erst mindestens eine Signatur erstellen");
        }   
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
nbergmann The type JOptionPane is not accessible. Java Basics - Anfänger-Themen 4
nbergmann Wo ist javax.swing.JOptionPane gespeichert? Java Basics - Anfänger-Themen 4
T jOptionPane zum schließen von Fenster, wie "Ja" und "Nein" anstatt Yes und No Java Basics - Anfänger-Themen 2
chocobear26 Interface JOptionPane - Dialog_Fenster zeigt immer vorherige Eingabe an. Java Basics - Anfänger-Themen 4
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
M JOptionPane Fehler bei "Abbrechen" des Fensters Java Basics - Anfänger-Themen 10
OSchriever Exception für Abbrechen-Schaltfläche JOptionpane Java Basics - Anfänger-Themen 9
S JOptionPane komplett leeres Fenster Java Basics - Anfänger-Themen 4
Dawinartor Klassen Zeilenumbruch in JOptionPane.showMessageDialog Java Basics - Anfänger-Themen 8
N javax swing JOptionPane Hilfe Java Basics - Anfänger-Themen 3
T JOptionPane mit eigenem Icon Java Basics - Anfänger-Themen 4
C JOptionPane tritt manchmal bei Plugin in den Hintergrund Java Basics - Anfänger-Themen 2
das_leon JOptionPane Titel setzen Java Basics - Anfänger-Themen 1
J jOptionPane, Array und negative Zahlen Java Basics - Anfänger-Themen 2
B JOptionPane Java Basics - Anfänger-Themen 5
S JOptionPane mit Schleife in einem Ausgabefenster Java Basics - Anfänger-Themen 4
K JOptionPane/catch/try/finally/if Java Basics - Anfänger-Themen 9
B JOptionPane Java Basics - Anfänger-Themen 4
N Erste Schritte JOptionPane - zerstörtes Layout Java Basics - Anfänger-Themen 2
D Erste Schritte JOptionPane Java Basics - Anfänger-Themen 7
S JOptionPane/Popup mit GUI Java Basics - Anfänger-Themen 2
R Fehler mit JOptionPane Java Basics - Anfänger-Themen 3
A Fehler bei der Speicherung von JOptionPane-Eingaben Java Basics - Anfänger-Themen 4
N Problem mit JOptionPane und Fenster-Fokus Java Basics - Anfänger-Themen 2
S Bild in JOptionPane Java Basics - Anfänger-Themen 1
L Strings in einem JOptionPane farbig Java Basics - Anfänger-Themen 2
E JOptionPane.showMessageDialog Fehler Java Basics - Anfänger-Themen 1
R Text Pane Aktualisierung erst nach JOptionPane Java Basics - Anfänger-Themen 10
J while (eingabe == "0") eingabe = JOptionPane.showInputDialog("...") Java Basics - Anfänger-Themen 5
S Konsolenausgabe ales JOptionPane? Java Basics - Anfänger-Themen 5
Z Darstellungsfehler mit JOptionPane Java Basics - Anfänger-Themen 2
L Interface JOptionPane Umwandlung Java Basics - Anfänger-Themen 10
L Anderes Layout für JOptionPane? Java Basics - Anfänger-Themen 6
S JoptionPane mit Umbruch Java Basics - Anfänger-Themen 21
Eileen Brüche addieren in Zwei Klassen mit JOptionPane Java Basics - Anfänger-Themen 4
S JOptionPane.showMessageDialog Java Basics - Anfänger-Themen 20
M JOptionPane 2 Angaben in ein Dialogfeld Java Basics - Anfänger-Themen 7
H JOptionPane YES Option mit Folge? Java Basics - Anfänger-Themen 2
P Input/Output JOptionPane Fehlermeldung Catchen Java Basics - Anfänger-Themen 5
N Grafiken in JOptionPane Java Basics - Anfänger-Themen 3
T Benutzereingabe in form von string wieder ausgeben in JOptionPane Java Basics - Anfänger-Themen 14
B Codeschnipsel-Frage zu JOptionPane Java Basics - Anfänger-Themen 4
D Problem mit meinem ersten JOptionPane - Fatal exception occurred. Program will exit. Java Basics - Anfänger-Themen 6
H Focus auf Textfeld in JOptionPane Java Basics - Anfänger-Themen 2
J JOptionPane wiederholt aufrufen Java Basics - Anfänger-Themen 2
M JOptionPane null on closing with X Java Basics - Anfänger-Themen 6
M GUI JOptionPane - Parameter im Konstruktor festlegen? Java Basics - Anfänger-Themen 5
brunothg Internal JOptionPane Icon ändern Java Basics - Anfänger-Themen 5
J CLOSE in JOptionPane Java Basics - Anfänger-Themen 7
S JOptionPane Java Basics - Anfänger-Themen 29
F Alternative zu JoptionPane Java Basics - Anfänger-Themen 7
M Datentypen JOptionPane Java Basics - Anfänger-Themen 13
D JOptionPane ohne Klick-Aufforderung Java Basics - Anfänger-Themen 9
F jOptionPane (ConfirmDialog) aufrufen Java Basics - Anfänger-Themen 2
E JOptionPane Java Basics - Anfänger-Themen 11
J JOptionPane Datum Eingabe Java Basics - Anfänger-Themen 3
R JOptionPane funktioniert nicht mit Abbrechen Knopf Java Basics - Anfänger-Themen 16
H JOptionPane validieren Java Basics - Anfänger-Themen 3
D nur JOptionPane im Windows Style Java Basics - Anfänger-Themen 3
D Wählfenster(JOptionPane) Java Basics - Anfänger-Themen 3
N Hilfe!!! JOptionPane Java Basics - Anfänger-Themen 12
N javax.swing.JOptionPane einbauen? Java Basics - Anfänger-Themen 9
M Hilfe: JOptionPane.showInputDialog Java Basics - Anfänger-Themen 3
T JOptionPane mit .showInputDialog: Ergebnis abfragen? Java Basics - Anfänger-Themen 2
P JOptionPane.showInputDialog Java Basics - Anfänger-Themen 6
L ParentComponent von JOptionPane Java Basics - Anfänger-Themen 2
X JOptionPane.showMessageDialog(); - Import Befehl? Java Basics - Anfänger-Themen 4
C JOptionPane mit Icon Java Basics - Anfänger-Themen 5
G Problem mit JOptionPane. Java Basics - Anfänger-Themen 7
P JOptionPane mit Inhalt? Java Basics - Anfänger-Themen 2
M HTML in JOptionPane-Dialog aber keine Links Java Basics - Anfänger-Themen 6
A JOptionPane -> abbrechen -> NullPointerException Java Basics - Anfänger-Themen 4
M JOptionPane - Dialog Java Basics - Anfänger-Themen 6
C Problem mit JOptionPane.showInputDialog Java Basics - Anfänger-Themen 2
G Schleife mit JOptionPane Java Basics - Anfänger-Themen 6
C JOptionPane in Taskleiste anzeigen Java Basics - Anfänger-Themen 3
G JOptionPane.showInputDialog Java Basics - Anfänger-Themen 2
F JOptionPane selbst programmieren Java Basics - Anfänger-Themen 8
G Problem miT JOptionPane Java Basics - Anfänger-Themen 6
G JOptionPane.TOOL_TIP_TEXT_KEY wie verwendet man es? Java Basics - Anfänger-Themen 4
G JOptionPane wird nicht angezeigt Java Basics - Anfänger-Themen 3
I Problem bei JOptionPane Java Basics - Anfänger-Themen 3
B JOptionPane in vordergrund bringen Java Basics - Anfänger-Themen 2
G JOptionPane zentrieren? Java Basics - Anfänger-Themen 2
M JOptionPane.OK_OPTION abfangen oder disablen? Wie? Java Basics - Anfänger-Themen 3
G JOptionPane Java Basics - Anfänger-Themen 4
P Probleme mit JOptionPane Java Basics - Anfänger-Themen 7
G JOptionPane Java Basics - Anfänger-Themen 6
B JOptionPane und das zweidimensianle Array Java Basics - Anfänger-Themen 2
M StackOverFlow bei JOptionPane? Java Basics - Anfänger-Themen 23
S JOptionPane.showInputDialog nur ein OK Button Java Basics - Anfänger-Themen 3
G JOptionPane Java Basics - Anfänger-Themen 8
D JOptionPane mit eigenem Icon Java Basics - Anfänger-Themen 2
A Bild einfügen in JOptionPane Java Basics - Anfänger-Themen 5
N JOptionPane.showInputDialog gibt null zurück Java Basics - Anfänger-Themen 9
D Thread und JOptionPane -> Problem Java Basics - Anfänger-Themen 6
D jOptionPane OK Button Java Basics - Anfänger-Themen 4
B JOptionPane mit mehr Eingabeflächen Java Basics - Anfänger-Themen 3
G JOptionPane Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben