如何在同一itemlistener函数中处理2个不同的组合框itemListener?

时间:2017-12-27 22:28:55

标签: java combobox itemlistener

我有两个ComboBoxes

JcomboBox1.addItemListener(this)
jComboBox2.addItemListener(this)

如何在同一itemListener函数中处理这些? 我正在为1个组合框处理它,但需要处理两个组合框

public void itemStateChanged(ItemEvent ie) {
       String Product=(String)jComboBox1.getSelectedItem();
          ResultSet rs=db.GetPriceOfaProduct(Product);
          try{
              rs.next();
              int price=rs.getInt("pPrice");
             jLabel6.setText("Amount Per Item is "+price);
          }catch(Exception e)
          {
              System.out.println("Error in Taking Product Price");
          }

2 个答案:

答案 0 :(得分:0)

您可以使用comboBox1.getSelectedItem() - 而不是使用comboBox2.getSelectedItem()JComboBox comboBox = (JComboBox) ie.getItem(); - 然后您可以引用任何JComboBox触发事件。

使用getSource()而不是getItem()

答案 1 :(得分:0)

使用ItemEvent.getSource()检查哪个JComboBox已更改选择。

请注意更改选择时,项目听众会收到两次通知,一次取消选中该项目,然后再选择另一项。

public static void main(String[] args) {
    JFrame frame = new JFrame("test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(new Dimension(500, 500));
    frame.getContentPane().setLayout(new GridLayout(5, 5));
    JComboBox<String> comboBox1 = new JComboBox<>(new String[] { "11", "12" });
    JComboBox<String> comboBox2 = new JComboBox<>(new String[] { "21", "22" });
    ItemListener listener = (e) -> {
        if (e.getStateChange() == ItemEvent.SELECTED) {
            if (e.getSource() == comboBox1) {
                System.out.printf("JComboBox 1 state changed: %s selected\n", e.getItem());
            }
            else if (e.getSource() == comboBox2) {
                System.out.printf("JComboBox 2 state changed: %s selected\n", e.getItem());
            }
        }
    };
    comboBox1.addItemListener(listener);
    comboBox2.addItemListener(listener);
    frame.getContentPane().add(comboBox1);
    frame.getContentPane().add(comboBox2);
    frame.setVisible(true);
}