Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann?

Funkeyfreak

Aktives Mitglied
Ich weiß wie ich den Wert der ComboBox auslese (also welcher Array-Wert ausgewählt wurde), jedoch weiß ich nicht wie ich diesen Wert in einer Variable speichern und diese in meinem ActionListener benutzen kann.

Ich hab versucht eine global variable zu benutzen und in dieser den Wert zu speicher, aber das funktioniert nicht da der Variablen wert in der Methode "public void itemStateChanged(ItemEvent arg0){" feststeckt und ich diese daher nicht in meinem ActionListener benutzen kann.

Ich hoffe ihr könnt mir helfen. Bin echt am verzweifeln...

Code:
String [] WarenTypListe = {"","Hochfrequente Ware", "Normale Ware"};
        JComboBox comboBoxHochfrequent = new JComboBox(WarenTypListe);
        comboBoxHochfrequent.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent arg0) {
                if(arg0.getStateChange() ==ItemEvent.SELECTED) {
                    //System.out.println(comboBoxHochfrequent.getSelectedIndex());
                    int s= comboBoxHochfrequent.getSelectedIndex();      -> diese Variable steckt fest in der Methode (auch wenn ich sie global definieren würde)

                }
            }
        });
        comboBoxHochfrequent.setFont(new Font("Tahoma", Font.BOLD, 30));
        comboBoxHochfrequent.setBounds(600, 144, 224, 49);
        contentPane.add(comboBoxHochfrequent);
      
        JButton btnArtikelHinzufuegen = new JButton("Artikel hinzuf\u00FCgen");
        btnArtikelHinzufuegen.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                DBConnect connect = new DBConnect();
                int s = comboBoxHochfrequent.getSelectedIndex();        -> hier versuch ich auf den Wert der ausgewählt wurde zuzugreifen was aber nicht funktoniert da ich nicht in der " public void itemStateChanged(ItemEvent arg0) {" Methode bin.
                boolean hochfrequent = false;
                if (s==1) {
                    hochfrequent = true;
                }
                if (s==2) {
                    hochfrequent = false;
                }
                System.out.println("es hat geklappt"+s);
                try {
                connect.setWareHinzufuegen(ArtikelIdInt, Artikelname, AnzahlWare, VeInt, zielort, regalnummerInt, hochfrequent);
                }
                catch (Exception e) {
                    System.err.println(e);
                }

            }
        });
-> die System.out.println benutze ich zum testen meines Programmes

PS: um den Code übersichtlicher zu gestalten habe ich die anderen varibalen die ich für die Kommunikation mit meiner DB brauche entfernt. -> die übergabe des Wertes von der ComboBox ist mein einziges Problem derzeit...
 
Hallo,

die Problematik hier ist aus meiner Sicht das Verständnis der Gültigkeit. Du hast mehrere Möglichkeiten, Variablen zu definieren:

Java:
public class Test {
    /**
     * Diese Variable ist statisch und existiert daher direkt in der Klasse.
     * Das heisst, sie existiert i.d.R. nur ein einziges Mal.
     * Zugriff erfolgt direkt über die Klasse also Test.staticInt und benötigt keine Instanz.
     */
    public static int staticInt;
    
    /**
     * Instanz-Variablen existieren direkt in der Instanz und können immer zugegriffen werden,
     * wenn du eine Instanz hast. (z.B. innerhalb von nicht statischen Methoden durch this.instanceInt)
     */
    public int instanceInt;
    
    /**
     * Eine Methode, die dann auf instanceInt zugreift.
     */
    public void someMethod() {
        instanceInt = 1;
        
        // Und nun noch eine lokale Variable. Die existiert nur hier bis zum Ende dieser Methode
        int localInt = 1;
    }
}

Das bedeutet also, dass Du den zuletzt selektierten Wert statt in einer lokalen Variable in einer Instanz-Variable speichern solltest. Also die Deklaration nicht in der Methode sondern in der Instanz selbst durchführen.

An dieser Stelle sollte man dann aber ggf. überlegen:
a) Erkennung, dass noch nichts selektiert wurde: Also auf was wird der Wert initialisiert? Man kann statt int z.B. Integer nutzen, dann wird null möglich. Man kann Optional<> verwenden. Oder da der Index immer >= 0 ist, kann auch -1 oder so als Erkennung genutzt werden.

b) Erwartungen des Benutzers / Usecase:
Ich glaube ich würde es verwirrend finden, wenn ein einmal selektierter Wert immer noch genommen würde, auch wenn die Selektion aufgehoben wurde. Daher würde ich immer bei der Action selbst schauen: Was ist denn gerade selektiert? Und das sollte doch auch in Deinem Code gehen, du musst nur eben den Fall abfangen, dass der Nutzer halt noch nichts selektiert hat. Dein Code, über comboBoxHochfrequent.getSelectedIndex(); den Index zu ermitteln, halte ich also durchaus für korrekt.
Wo ist das eigentliche Problem bei dem Code? Geht die Selektierung durch irgendwas wieder verloren, so dass Du meinst, dies noch einmal speichern zu müssen? Das ist ja im Element selbst gespeichert und daher ist eine Duplizierung nicht wirklich notwendig.
Aber meine Erwartungen können hier natürlich falsch sein und man will tatsächlich auch bei einer aufgehobenen Selektierung den Wert noch haben .... Aber in einer UI finde ich das eher verwirrend.
 

Zurück
Oben