Listener auf Swing Controls automatisch zuweisen

  • Ich habe ein JPanel mit einigen Steuerelementen, die neben der Steuerung über Tastatur und Maus auch per Codebefehl geändert werden können (zB. Sliderpositionen).

    Nun will ich jetzt nicht für jedes Steuerelement einen eigenen Listener implementieren, sondern alle Elemente aus dem Panel rauslesen und ihnen einen einzigen Listener zuweisen, aber welchen?


    1. Versuch: PropertyChangeListener oder StateChangeListener.
    Leider werden die immer gefeuert, selbst wenn man nur mit der Maus drüberfährt. Ich will natürlich nur Events auslösen wenn sich der Wert (Slider-Position, angeklickte Checkbox) ändert. Leider wird immer dasselbe Property ausgegeben, egal was man mit dem Steuerelement macht.

    Mein Workaround hat auch nicht funktioniert: Ich wollte die Events mit getOldValue() und getNewValue() überprüfen, aber die sind auch immer vom selben Typ, egal welche Property sich ändert.

    EDIT: Hab das Problem mit mehreren verschiedenen Listenern, je nach Typ, gelöst. Jetzt habe ich das nächste Problem: wie kann man die ButtonGroup aus einem JRadioButton rauslesen?

    Hat jemand eine Idee?

    3 Mal editiert, zuletzt von Stephe (23. Juli 2009 um 00:27)

  • ich schätze mal getParent()?

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷

  • AFAIK unmöglich, da es nur eine einseitige Verbindung gibt.

    Code
    ButtonGroup g = new ButtonGroup();
    g.add(new JRadioButton());

    Die ButtonGroup überwacht die mit add hinzugefügten Buttons, aber die Buttons wissen davon eigentlich nichts. Du könntest allerdings deine eigene Button-Klasse schreiben, die eine zusätzliche Methode getButtonGroup() hat.

    Dann musst du halt die Buttons anders erstellen:

    Code
    ButtonGroup g = new ButtonGroup();
    SuperRadioButton b = new SuperRadioButton();
    g.add(b);
    b.setButtonGroup(g);

    Ob das sinnvoll ist? Wer weiß...
    Ob das hübsch ist? Nein.
    Ob das funktioniert? Ja.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!