Liveaktualisierung JSlider - ChangeListener umgehen?

Angiii

Erfahrenes Mitglied
Hallo,

ich habe ein kleines Java-Applet mit dem ich eine LCD-Anzeige ansteuere. Auf dem Applet befindet sich u.a. eine JSlider mit dem ich die Helligkeit des Display verändern kann. Zudem habe ich am Display selbst noch einen kleinen Knopf mit dem ich über einen Mikrocontroller die Helligkeit des Displays ändere.

Beide Steuerungen laufen auf der gleichen RS232-Schnittstelle auf. Das bietet den Vorteil, dass ich über einen ReadThreat im Java Applet live auslesen kann, was am Displayregler eingestellt wird.

Nun will ich realisieren, dass meine JSlider live mitläuft, wenn ich am Displayregler drehe. Zudem will ich aber immer noch auch über die JSlider die Helligkeit regeln können. Da kommt mir jetzt mein ChangeListener in die Quere. Wenn ich die Werte vom Displayregler mit "setvalue(...)" in die JSlider setzen will, interpretiert der JSlider-Change Listener das gleichzeitig als Change Event und schickt ebenfalls einen Befehl für die Helligketisregelung. Dabei sollte eigentlich nur die GUI Anzeige aktualisiert werden.

Wie kann ich das am elegantestens Lösen? Möglichkeiten die mir eingefallen sind:

1. Kombination aus MouseListener und ChangeListener, so dass die JSlider nur bei Mausklicks reagiert, nicht aber wenn ich die Anzeige aktualisiere. Nachteil: Zwei Listeners nötig.

2. Die JSliders nur über einen MouseListener ansteuern. Nachteil: JSlider lässt sich nicht "flüssig" von links nach rechts bewegen.

3. Irgendwas mit MouseMoved in Verbindung mit ChangeListener. Naja, fast wie Lösung 1.

Was sagt ihr dazu? Wie mache ich das am geschicktesten? Vielen Dank schonmal
 
Wenn du im ChangeListener das Event bekommst, braucht du doch nur schauen ob alter und neuer Wert übereinstimmen. Denn im Modell ist der richtige Wert ja schon gesetzt. Nur wenn die Werte sich geändert haben musst du dann noch den Befehl rausschicken.
 
Hey der Ansatz klingt sogar richtig gut. Hab das jetzt mal umgesetzt. Leider friert mir jetzt das GUI immer ein. Mal sehen woran liegt. Vielleicht muss ichs über einen SwingWorker machen....
 
Habs leider bisher noch nicht hinbekommen. Das ganze hängt sich ständig auf. Ich hoffe mal das ich den Fehler noch finde, in de Theorie sollte es ja funktionieren.

Gäbe es noch andere brauchbare Lösungsmöglichkeiten?
 
So jetzt hab ichs mal mit hilfe eines extra MouseListeners realisiert. Keine schöne Lösung, aber zumindest eine, die auf Anhieb funktioniert hat. Auch wenn ich jetzt gerade den Überblick in meinem Programm verloren habe ;-).
 
Zurück