JComboBox und Listener

Hallo,

ich habe eine leere JComboBox und möchte diese mit Daten füllen wenn sie angeklicket wird.
Welchen Listener verwendet man in diesem Fall ?

Ich habe es schon mit verschiedenen z.B. ActionListener oder MouseListener versucht. Leider war dies erfolglos.

Irgendwie funktionieren die Listener nur wenn die Box gefüllt ist und man dann eine Auswahl macht. Zumindest passiert dann etwas unter dem ActionListener. Der MouseListener mit mouseClicked reagiert nie.

Habt Ihr einen Tipp ??

Danke
Arni

Hallo,

also rein von der API-Dokumentation her, würde ich sagen, dass es ein PopupMenuListener tun solle. Die Doku zu JComboBox sagt dazu:

public void addPopupMenuListener(PopupMenuListener l)

 Adds a PopupMenu listener which will listen to notification 
 messages from the popup portion of the combo box.

 For all standard look and feels shipped with Java 2, the popup 
 list portion of combo box is implemented as a JPopupMenu. A custom 
 look and feel may not implement it this way and will therefore not
 receive the notification.

 Parameters:
 l - the PopupMenuListener to add
 Since:
 1.4

Hört sich zumindest für mich so an, all wenn diese Action ausgelöst wird, wenn jemand auf die Combobox draufklickt, damit sich die Box öffnet.

Zumindest ein Versuch ists wert.

Desweiteren könntest du auch noch einen FocusListener verwenden, der wird abgefeuert, wenn die Combobox den Focus bekommt.

mfg
deconstruct

Die Sache funktioniert. Danke.
Ein Problem habe ich aber noch.
Ich würde gerne für mehrere ComboBoxen den gleichen Listener verwenden und dann im Listener entscheiden welche ComboBox geklickt wurde.
Beim ActionListener gibt es z.B. das Kommande „getActionCommand“ das ich beim Erzeugen der ComboBox mit setActionCommand belegen kann. Beim
PopupMenuListener geht das nicht. Schaut man sich das Event im Debuuger an, so hat das Event auch die Info „actionCommand“ leider läßt sie sich aber nicht abrufen.

Wie könnte man noch eine ComboBox identifizieren ?

Danke
Arni

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Arni,

für Dein Problem schau Dir mal http://java.sun.com/j2se/1.4.2/docs/api/java/util/Ev… an.
Jedes Event eine i.d.R. eine Source (Quelle) die das Ereignis ausgelöst hat.

Einfach auf JComboBox casten und du hast Die korrekte Instanz. Bei den Buttons kann man das u.U. genauso machen.

Gruss,
Frank

[…]
Ein Problem habe ich aber noch.
Ich würde gerne für mehrere ComboBoxen den gleichen Listener
verwenden und dann im Listener entscheiden welche ComboBox
geklickt wurde.
Beim ActionListener gibt es z.B. das Kommande
„getActionCommand“ das ich beim Erzeugen der ComboBox mit
setActionCommand belegen kann. Beim
PopupMenuListener geht das nicht. Schaut man sich das Event im
Debuuger an, so hat das Event auch die Info „actionCommand“
leider läßt sie sich aber nicht abrufen.

Wie könnte man noch eine ComboBox identifizieren ?

Danke
Arni

Hallo,

Wie könnte man noch eine ComboBox identifizieren ?

Du hast ja jetzt einen PopupListener verwendet. Dann hast du ja irgendwo die Funktionen

  • popupMenuCanceled(PopupMenuEvent e)
  • popupMenuWillBecomeInvisible(PopupMenuEvent e)
  • popupMenuWillBecomeVisible(PopupMenuEvent e)
    implementiert, wo du die Events abfängst.

Dort bekommst du ja einen PopupEvent mit. Bei Actionlistener hast du dann einfach e.getActionCommand() gemacht, nehme ich an, um herauszubekommen, wer den Event ausgelöst hat.

Beim Popuplistener kannst du e.getSource() aufrufen, das liefert dir das Objekt zurück, welches den Event ausgelöst hat. Dieses Objekt sollte eigentlich die Combobox sein. Dort solltest du dann in etwas so an das ActionCommand kommen.

public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
 Object source = e.getSource();
 if (source instanceof JComboBox) { 
 String actionCmd = ((JComboBox) source).getActionCommand();
 }
}

Das sollte das normal tun, denke ich.

mfg
deconstruct

Vielen Dank,

zwischenzeitlich hatte ich es auch so gemacht.
Als Anfänger braucht man halt manchmal etwas länger um auf die „einfachste“ Lösung zu kommen.

Danke
Arni

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]