Swing Mehrere JComboBoxen - wie die versch. Boxen mit ItemStateChange auslesen?

it_is_all

Aktives Mitglied
Hi,
habe in einer Klasse, die JPanel erweitert 3 ComboBoxen:
Java:
    public void setAlleActionListener(AufgabeSymmetrisch aufg_objekt){
        this.aufg_objekt = aufg_objekt;
        jComboBox1.addItemListener(aufg_objekt);
        jComboBox2.addItemListener(aufg_objekt);
        jComboBox3.addItemListener(aufg_objekt);
    }

Wie ihr seht, möchte ich das Event in dem Objekt "aufg_objekt" handlen, bzw. darauf regieren. Jede Boxauswahl jeder JComboBox soll hier getrennt bearbeitet werden:
Java:
    @Override
    public void itemStateChanged(ItemEvent ie) {
        //CODE
    }

Wie mache ich das? So wie bei einem ActionListener für mehrere Buttons in einer Klasse klappt es ja nicht, da ganz anderer Fall:
Java:
if(ae.getSource() == ObjectK.jButton_Fertig)

Vielen Dank für schnelle Hilfe! Loveyou
 
Hallo, keiner ne Antwort? 🙂
Java:
    public void itemStateChanged(ItemEvent ie) {
        if (ie.getSource() == JPanelAufgabeSymmetrisch.jComboBox2){
            combobox_auswahl = (String)(ie.getStateChange() == 1 ? JPanelAufgabeSymmetrisch.jComboBox2.getSelectedItem() : "");
            if("A".equals(combobox_auswahl) || "B".equals(combobox_auswahl) || "C".equals(combobox_auswahl) || "D".equals(combobox_auswahl) || "E".equals(combobox_auswahl) || "F".equals(combobox_auswahl) || "G".equals(combobox_auswahl) || "H".equals(combobox_auswahl) || "I".equals(combobox_auswahl) || "J".equals(combobox_auswahl) || "K".equals(combobox_auswahl) || "L".equals(combobox_auswahl) || "M".equals(combobox_auswahl) || "N".equals(combobox_auswahl) || "O".equals(combobox_auswahl) || "P".equals(combobox_auswahl) || "Q".equals(combobox_auswahl) || "R".equals(combobox_auswahl) || "S".equals(combobox_auswahl) || "T".equals(combobox_auswahl) || "U".equals(combobox_auswahl) || "V".equals(combobox_auswahl) || "W".equals(combobox_auswahl) || "X".equals(combobox_auswahl) || "Y".equals(combobox_auswahl) || "Z".equals(combobox_auswahl)){
            //...Hilfsabfrage, damit Code klappt
                if(verschluesselungstechnik == "caesar"){
                    int index_combobox_auswahl = getIndexVomBuchstabenImAlphabet(combobox_auswahl);
                    checkeRichtigkeit_Caesar(0, index_combobox_auswahl);
                }
            }
        }
    }

[...]

    private int getIndexVomBuchstabenImAlphabet(String input){
        String in = input.toUpperCase();
        String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        int position = alphabet.indexOf(in.charAt(0)); //"(0)": ist ja eh immer nur von einem Buchstaben
        return position;
    }


Noch eine andere Frage:
Wenn ich "if("A".equals(combobox_auswahl) ... ("Z".equals(combobox_auswahl)" weglasse, dann klappt nur die Verarbeitung der ersten Abfrage in der ComboBox1, bei der zweiten kommt ein OutOfBounds 0 - Fehler, was kann ich machen, um mir "if("A".equals(combobox_auswahl) ... ("Z".equals(combobox_auswahl)" zu sparen?
Genaue Fehlermeldung:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(String.java:658)
    at keycay.AufgabeSymmetrisch.getIndexVomBuchstabenImAlphabet(AufgabeSymmetrisch.java:84)
    at keycay.AufgabeSymmetrisch.itemStateChanged(AufgabeSymmetrisch.java:153)
    at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1223)
    at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1271)
    at javax.swing.JComboBox.contentsChanged(JComboBox.java:1330)
    at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:118)
    at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:93)
    at javax.swing.JComboBox.setSelectedItem(JComboBox.java:576)
    at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:622)
    at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:861)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
    at java.awt.Component.processMouseEvent(Component.java:6533)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(BasicComboPopup.java:510)
    at java.awt.Component.processEvent(Component.java:6298)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
BUILD SUCCESSFUL (total time: 8 seconds)

MFG (ist echt wichtig)

P.S. meldet euch, wenn ihr noch mehr Code braucht
 
Zuletzt bearbeitet:
was kann ich machen, um mir "if("A".equals(combobox_auswahl) ... ("Z".equals(combobox_auswahl)" zu sparen?
EIne ArrayList<String> erstellen, dort die Werte "A" bis "Z" reinpacken, und dann schauen, ob die ArrayList die Auswahl der JComboBox enthält.
Hallo, keiner ne Antwort?
Du hast doch schon deine Antwort: ie.getSource() liefert dir die JComboBox. Was brauchst du denn noch?
Der Code sieht übrigens hässlich aus. Bestes denglisch, unter dem Klassenname "AufgabeSymmetrisch" kann ich mir absolut gar nix vorstellen, und JPanelAufgabeSymmetrisch.jComboBox2 riecht streng nach static, obwohl die JComboBox, die den EVent ausgelöst hat, ja dem event als source mitgegeben wird.
 

Zurück
Oben