JCheckBox ItemStateChanged wird bei setEnabled(false); dauerhaft aufgerufen

Crashkurs

Grünschnabel
Hey Leute,
habe ein kleines Problem, und zwar soll ich Kniffel im Netzwerk realisieren, wobei ich 5 Checkboxen habe, womit der Benutzer ankreuzen kann, welche Würfe er behalten will. Jedes Mal, wenn ein Benutzer eine Checkbox anclickt, möchte ich an den Server einen String senden, in dem die Nummer der Checkbox und der Status gespeichert ist. Nachdem das dritte Mal geworfen wurde, sollen diese Checkboxen deaktiviert werden, damit man keine weiteren Nachrichten durch anclicken von diesen an den Server sendet.
Nun zu meinem Problem: Nachdem diese Checkboxen deaktivert wurden, wird die Methode ItemStateChanged(ItemEvent ie) vom ItemListener dauerhaft aufgerufen, wobei jedes Mal ein oder mehrere Checkboxen vom Status(Selected/Deselected) her verändert wurden. Habe schon versucht, die Checkboxen vor dem Deaktivieren auf Deselected zu setzen. Dies klappt aber leider auch nicht.

Code:
public void setzeItemListener(ItemListener il)
    {
        c1.addItemListener(il);
        c2.addItemListener(il);
        c3.addItemListener(il);
        c4.addItemListener(il);
        c5.addItemListener(il);
    }
Code:
public void itemStateChanged(ItemEvent ie)
    {
        if(anzahlKlicks != 3)
        {
            kc.halten();
        }
    }
Code:
 public void halten()
    {
        boolean[] halt = new boolean[5];
        halt[0] = w.wb.c1.isSelected();
        halt[1] = w.wb.c2.isSelected();
        halt[2] = w.wb.c3.isSelected();
        halt[3] = w.wb.c4.isSelected();
        halt[4] = w.wb.c5.isSelected();
        kc.send("Halten#"+halt[0]+"#"+halt[1]+"#"+halt[2]+"#"+halt[3]+"#"+halt[4]);
    }
Code:
anzahlKlicks++;
            if(anzahlKlicks==1)
            {
                wb.setzeCheckboxStatus(true);
                wb.würfeln(anzahlKlicks);
                kc.gewürfelt();
                wb.anzahlWürfe.setText(" Wurf 1 von 3 ");
                d.esIstGewürfeltWorden();
                Kniffelkarte k = kc.k;
                int nummer = kc.aktiverSpieler;//Aktiviere Eintrags-Buttons
                k.aktiverSpielerButtonsSetEnabled(nummer,true);
            }

            if(anzahlKlicks==2)
            {
                wb.würfeln(anzahlKlicks);
                kc.gewürfelt();
                wb.anzahlWürfe.setText(" Wurf 2 von 3 ");
            }

            if(anzahlKlicks==3)
            {
                wb.würfeln(anzahlKlicks);
                kc.gewürfelt();
                wb.setzeCheckboxStatus(false);
                wb.b2.setEnabled(false);
                
                wb.anzahlWürfe.setText(" keine Würfe mehr ");
            }

Hoffe ihr könnt mir helfen, ich nämlich mir nicht mehr ;-)
Gruß,
Crashkurs
 
Hey,

bitte benutze für Java Code entspreche Java-Tags anstatt Code-Tags, das macht den Code leslicher...
Zu deinem Problem: Wenn du wirklich bei jedem Klick den String an den Server schicken möchtest, dann empfehle ich dir den ActionListener anstatt ItemListener zu benutzen.
 
Hey,
Ok, das mit den Java-Tags werde ich mir merken ;)
Habe das Problem jetzt auch gefunden. Der Server leitet den String an alle Clienten weiter, welche die Checkboxen dann so einstellen, wodurch wieder ItemStateChanged aufgerufen wird und ein neuer String gesendet wird.

Danke für den Tipp mit dem ActionListener, dann baue ich den ein :)
Gruß
 
Tja ... bei so einem Protokoll-Fehler wird dir der ActionListener auch nicht helfen.
Was du jetzt machen musst ist ist im Server eine Prüfung einbauen die checkt ob es dieses "Halten"-Commando ist oder nicht ... und bei zutreffen halt nur verarbeiten , jedoch nicht broadcasten.

ps : makiere den Thread bitte als erledigt wenn dei Problem behoben ist.
 
Zurück