单个类中的多个itemlisteners

时间:2013-11-07 04:59:54

标签: java swing jcombobox itemlistener

我是Java和Swing的新手,正在关注zetcode tutorial。我想添加多个JComboBox es并存储为其中每个选择的索引。 index1应保留JComboBox的第一个实例中的选定索引,而index2应保留JComboBox的第二个实例中的选定索引。对于一个JComboBox,可以这样做:

public ComboBox() {

    setLayout(new BoxLayout(getContentPane(), 
    BoxLayout.Y_AXIS));
    add(Box.createRigidArea(new Dimension(0, 35)));

    combobox = new JComboBox(authors);
    combobox.addItemListener(this);
    add(combobox);
}
public void itemStateChanged(ItemEvent e) {

    if (e.getStateChange() == ItemEvent.SELECTED) {
        JComboBox combo = (JComboBox) e.getSource();
        int index = combo.getSelectedIndex();
        display.setIcon(new ImageIcon(
            ClassLoader.getSystemResource(images[index])));
    }

}

因此,如果我可以编写应为每个JComboBox调用的itemlistener的名称,然后我可以编写combobox.addItemListener(this)而不是编写combobox.addItemListener(itemListener1)。我该怎么做?

2 个答案:

答案 0 :(得分:2)

尝试这样做

combobox1.addItemListener(this);
combobox2.addItemListener(this);
..
comboboxn.addItemListener(this);

public void actionPerformed(ActionEvent e) {
 if(e.getSource().equals(comboBox1))
 {
  \\do something
 }
 else if(e.getSource().equals(comboBox2))
 {
  \\do something
 }
..
 else if(e.getSource().equals(comboBoxn))
 {
  \\do something
 }

答案 1 :(得分:0)

使用内部或匿名类,有助于避免使用“if - else”语句。

Exemple!匿名类