how to handle 2 different combobox itemListener in same itemlistener function?

384 views Asked by At

I Have two ComboBoxes

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

How can I handle these in the same itemListener Function?
I am handling it for 1 combobox but need to handle with both combo box

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

There are 2 answers

0
Kevin Wang On BEST ANSWER

Use ItemEvent.getSource() to check which JComboBox has changed selection.

Please be aware on changing selection, the item listener will be notified twice, once on the item deselected, followed by another on the item selected.

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);
}
1
JMoney On

Rather than using comboBox1.getSelectedItem() or comboBox2.getSelectedItem(), you can use JComboBox comboBox = (JComboBox) ie.getItem(); - you then have a reference to whichever JComboBox triggered the event.


Use getSource() not getItem()