Portál AbcLinuxu, 10. května 2025 00:55

Dotaz: Listener pro jednotlivé položky JComboBoxu

15.6.2010 19:40 m*
Listener pro jednotlivé položky JComboBoxu
Přečteno: 150×
Odpovědět | Admin
Zdravím, potřebuji radu ohledně JComboBoxu.

Mám nějaký objekt typu JComboBox a v něm nějaké položky. Chtěl bych, aby položka, je-li vybrána, vyslala posluchačům událost. Jde o to, že vybrání položky má v mém programu způsobit okamžitou změnu (nejedná se o prosté zobrazení výběru). Dosud ovládání JComboBoxu řeším tak, že celému JComboBoxu předám listener, ve kterém je podmínka, která se rozhoduje o dalším běhu na základě získání zdrojového JComboboxu (EventObject.getSource(), JComboBox.getSelectedIndex()) - to je nepřehledné.

Představoval jsem si to tak, že by se každé položce JComboBoxu předal listener (s parametrem určujícím činnost). Pokud by byla položka vybrána, poslala by se zpráva danému listeneru, který by na základě parametru rozhodl, co dál.

Existuje něco takového ve standardním API Javy?

Případně prosím o jiné rady týkající se řešení tohoto problému.

Děkuji.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.6.2010 20:24 m*
Rozbalit Rozbalit vše Re: Listener pro jednotlivé položky JComboBoxu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ještě mě napadlo to dělat takto...

a) tvorba komponenty:
...
JComboBox myJComboBox = ...
MyJComboBoxItem myJComboBoxItem = ...

myJComboBox.addItem(myJComboBoxItem);
...
b) listener:
class ... implements ItemListener {
  public void itemStateChanged(ItemEvent event) {
    JComboBox myJComboBox = (JComboBox) event.getSource();
    MyJComboBoxItem item = (MyJComboBoxItem) myJComboBox.getSelectedItem();
    ...
  }
}
Nevýhodou je docele zbytečná vazba na JComboBox... Nicméně se tím lze vyhnout vazbě na pořadí položek JComboBoxu.
15.6.2010 20:31 m*
Rozbalit Rozbalit vše Re: Listener pro jednotlivé položky JComboBoxu
Rád bych zdůraznil, že JComboBoxu se nepředává v metodě addItem() String, ale jiný objekt. To je hlavní rozdíl.
16.6.2010 06:57 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Listener pro jednotlivé položky JComboBoxu
Toto je podla mňa štandardný spôsob riešenia. Nechápem čo sa ti na ňom nepáči.
16.6.2010 09:42 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Listener pro jednotlivé položky JComboBoxu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ve standardním API na to už hotová podpora není, ale není problém si to doplnit. Vkládejte do modelu JComboBoxu prvky, které implementují třeba interface java.awt.event.ItemListener, a v ItemListeneru JComboBoxu pak zavolejte následující kód:
public void itemStateChanged(ItemEvent event) {
  if (event.getItem() instanceof ItemListener) {
    ((ItemListener) event.getItem()).itemStateChanged(event);
  }
}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.