1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Listener auf Swing Controls automatisch zuweisen

  • Stephe
  • 22. Juli 2009 um 23:38
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • Stephe
    Punkte
    6.038
    Beiträge
    968
    • 22. Juli 2009 um 23:38
    • #1

    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)

  • sutupud
    Punkte
    1.659
    Beiträge
    320
    • 23. Juli 2009 um 00:32
    • #2

    ich schätze mal getParent()?

  • Stephe
    Punkte
    6.038
    Beiträge
    968
    • 23. Juli 2009 um 10:27
    • #3

    Eben nicht :(, da bekomm ich den Container wo die Buttons drin sind (also das JPanel)

  • spinball
    Punkte
    1.192
    Beiträge
    223
    • 28. Juli 2009 um 15:37
    • #4

    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.

    Code
    public class SuperRadioButton extends JRadioButton {
    	private ButtonGroup group;
    	public SuperRadioButton() {
    		super();
    	}
    	public void setButtonGroup(ButtonGroup g) {
    		group = g;
    	}
    	public ButtonGroup getButtonGroup() {
    		return group;
    	}
    }
    Alles anzeigen

    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.

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum