Swing Wechsel in JCheckBox abfangen

Status
Nicht offen für weitere Antworten.

Eule

Mitglied
Hallo an Alle hier im Forum (juhu 1. post)

Ich habe hier eine JCheckbox und möchte den Wechsel von selected/unselected gerne kontrollieren. Hier heißt das genau, dass ich den Wechsel an mehrere Bedingungen knüpfen möchte.
Hat wer eine Idee, wie ich das ChangeEvent abfangen kann? Oder ist es besser, hier evtl. ganz auf eine Checkbox zu verzichten? Das Bild von selected und unselected habe ich eh ausgetauscht und so könnte ich zur Not auch ein JLabel nehmen und das Bild manuell auswechseln. Schöner fänd ich es aber trotzdem mit einer CheckBox.

Gruß
Eule
 
Hallo Eule,

ich verstehe nicht ganz was du erreichen möchtest.

Willst du abfangen wenn jemand die Checkbox aktiviert oder deaktiviert? Das wäre dann wohl das Thema ActionListener.

Oder möchtest du, dass das Programm selbst den Haken setzt?
Das wäre dann die Methode chkbox.setSelected(true/false).
 
OK. Ich versuche noch mal das besser zu erklären.

Ich habe ein Programm, was einen Boolean in der CheckBox anzeigt. Als Beispiel seit es ausgewählt, also der Hacken ist gesetzt. Jetzt klickt der Benutzer auf die Box und würde damit den Hacken wegnehmen.
Das Programm soll aber statt den Hacken wegzunehmen nur den Wert nehmen, den es gerade hat (noch true) und den Wert an einen Server senden, der Fragt ob der Hacken entfernt werden darf. Der sendet wieder rum dann erst ein Signal zurück und sagt ob es ihm erlaubt ist zu wechseln.
Mit anderen Worten. Die Funktion, dass er es automatisch true/false setzt brauche ich gar nicht. Das erledige ich selbst.

Ich hoffe es ist einiger Maßen klar geworden
 
Ok das würde ich jetzt klassisch über einen ActionListener regeln.


Java:
jx.addActionListener(new ActionListener() {
			
    public void actionPerformed(ActionEvent e)
    {
           //	Hier kommt rein was du gerne ausführen möchtest wenn jemand   
           //            das teil anklickt. ActionEvent e liefert weitere Infos.
     }
});

Ich weiß nicht ob du mit ActionListenern vertraut bist. Die Methode actionPerformed(..) wird aufgerufen wenn jemand den Haken setzt oder rausmacht. In der Methode kannst du den Server befragen und dann den Haken wieder reinsetzen wenn er nicht rausgemacht werden darf z.B.
 
Danke für die Antwort. Ich bin auch mit Actionlistenern vertraut.

Jedoch ist das gerade das was ich nicht will. Das kurzzeitig ein falscher Wert angezeigt wird. Das mag unter normalen Umständen nicht schlimm sein, aber wenn irgendwas mit dem Netzwerk oder Server ist, kann dort doch eine längere Zeit was falsches stehen. Was in diesem Fall aber schlimme Folgen haben kann.

edit: Ich kann natürlich mittels einem ChangeListener auch den alten Wert noch im Listener abfragen und unmittelbar wieder setzen. Aber warum muss ich das überhaupt erst machen?
 
Zuletzt bearbeitet:
Ok verstehe. Wäre es dann nicht geschickter, den Haken schon beim Laden der Oberfläche zu deaktivieren, wenn der Server eine Änderung verbietet?

Edit:
Das wäre vielleicht auch im Sinne des Erfinders, eine Checkbox die man nicht verändern darf zu deaktivieren.
 
Zuletzt bearbeitet:
In dem Fall würde ich eventuell einen eigene Komponente nehmen, die einfach nur das Bild einer CheckBox zeigt. MouseListener drauf setzen, bei Click prüfen und ggf. das Bild austauschen.
 
kurz mal was zu meinem Programm damit die Problematik etwas klarer wird.

Ich habe einen Server und mehrere Clienten. Jeder Client hat die Checkbox und darf sie ändern. Auch hat jeder Client die Information, ob er die Checkbox ändern darf oder nicht. Nur hat der Server gewissermaßen das letzte Wort und bewahrt somit die Synchronisation aller Clienten.

Wenn der Benutzer keine Recht hat um die Checkbox auszuwählen (aus Client Sicht), dann ist sie auch deaktiviert.
Jetzt kann es aber sein, dass durch unglückliche Übertragungsfehler ein Client mal die Rechte falsch setzt. In diesem Fall würde der Server dann den Wechsel verhindern.

edit: mit setEnable(false) setzt er ja auch die Hintergrundfarbe anders, was dem Benutzer ja suggerieren würde, dass er nichts ändern darf. Das ist ja aber falsch.
Ich glaube ich mache das echt mit nem JLabel.
 
Zuletzt bearbeitet:
Du möchtest also doppelt prüfen, ob ein Benutzer diesen Haken setzen darf, sehe ich das richtig? Einmal hat die Client-Software Information darüber ob geklickt werden darf, und zweitens wird auf jeden Fall noch mal der Server gefragt.

Sollte ein Benutzer den Haken setzten wollen, es aber nicht dürfen. So wundert er sich wieso der Haken nicht geändert werden kann obwohl er nicht deaktiviert ist.

Ich denke, der geschicktere Ansatz wäre eine Kontrolle an einder anderen Stelle und nicht an der Oberfläche. Also z.B. wenn das, was der Haken auslösen soll, vorher noch mal geprüft wird.
 
Im Prinzip hast du das schon richtig erfasst. Das doppelte abfragen ist zur Bandbreitenreduktion, da die Rechte relativ selten gewechselt werden und das wechseln von so welchen Checkboxen häufiger vor kommt. Wenn ich jetzt jedes Mal eine Anfrage an den Server senden würde, würde sich der Traffic für diesen Bereich vervielfachen.

Wenn er den Server fragt funktioniert das so: er fragt den Server ob er darf. Wenn nein, schickt er einen Fehlercode zurück. Wenn ja, schickt er die Änderung an alle Benutzer. Jeder Benutzer bearbeitet dann die Anfrage und setzt bei sich den Hacken. Hier wird also die Checkbox wirklich vom Server gesteuert.

Wie schon gesagt, wenn der Benutzer keine Rechte hat um den Hacken zu setzen, dass ist die CheckBox deaktiviert (also auch grau hinter legt).

Die Stelle ist schon die Beste, da der Hacken (in diesem Fall )eine grafische Oberfläche deaktiviert.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben