Saleh Refaai
Saleh Refaai

Reputation: 709

Java JCombobox Update issue

I am trying to change JCombobox items list (towns) depending on the value of the other JCombobox (city). When I change the value in the city list, it changes the items in the towns list. But there are 2 issues.

  1. The updated list (towns) shows double of the items but when click on it then it shows the correct number of items as shown in the first screenshot.
  2. The updated list doesn't allow me to choose one of the item, it only select the first item

a

here is my code:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;   
public class Testing extends JFrame implements ActionListener {
    
    public static void main(String[] args )
    {
    new Testing();
    }
    JComboBox cb,cb1,cb2;
    JFrame f; 
    JLabel label1,label2;
    JButton b1;
    JTextField name,ID,birth;
    
    
 Testing(){    
        f=new JFrame("Information Example");  
        label1 = new JLabel("Please input your information below");
        label1.setBounds(10, 20, 260, 30);
      f.add(label1);
        String question[]={"Calculate my Age","When do I drive","When do I vote"};
        String city[]={"Asimah","Ahmadi","Hawalli"};
       
               
         name= new JTextField("NAME");
        name.setBounds(10,50,264,25);
        f.add(name);
         ID= new JTextField("CIVIL ID");
        ID.setBounds(10,80,264,25);
        f.add(ID);
         birth= new JTextField("DATE OF BIRTH");
        birth.setBounds(10,110,264,25);
        f.add(birth);
        cb=new JComboBox(question);    
        cb.setBounds(50, 150,180,20);    
        f.add(cb);
        b1= new JButton("Get");
        b1.setBounds(100,250,60,20);
        f.add(b1);
        cb1=new JComboBox(city);    
        cb1.setBounds(10, 200,120,20);    
        f.add(cb1);
        cb2=new JComboBox();    
        cb2.setBounds(150, 200,120,20);    
        f.add(cb2);
     
        f.setLayout(null);    
        f.setSize(300,400);    
        f.setVisible(true);
        cb.addActionListener(this);
        cb1.addActionListener(this);
        cb2.addActionListener(this);
}
 @Override
 public void actionPerformed(ActionEvent event)
 {
     if(cb1.getSelectedIndex() == 0)
     {
         cb2.removeAllItems();
        
         cb2.addItem("Rawdhah");
         cb2.addItem("Abdahll");
     }
     else if(cb1.getSelectedIndex() == 1)
     {
        
         cb2.removeAllItems();
         cb2.addItem("Siddiq");
         cb2.addItem("Aljabryha");
     }
     else
     {
         cb2.removeAllItems();
         cb2.addItem("Fintas");
         cb2.addItem("Abdahll");
     }
     
 }
}

Upvotes: 0

Views: 114

Answers (1)

MadProgrammer
MadProgrammer

Reputation: 347334

So, basically, the combination of removeAllItems and addItem is causing the JComboBox to generate a ActionEvent, but only for the first new item added.

You should isolate your functionality to only perform certain actions based on the source of the event, for example...

@Override
public void actionPerformed(ActionEvent event) {
    if (event.getSource() == cb1) {
        if (cb1.getSelectedIndex() == 0) {
            cb2.removeAllItems();

            System.out.println(cb2.getItemCount());

            cb2.addItem("Rawdhah");
            cb2.addItem("Abdahll");
        } else if (cb1.getSelectedIndex() == 1) {

            cb2.removeAllItems();
            cb2.addItem("Siddiq");
            cb2.addItem("Aljabryha");
        } else {
            cb2.removeAllItems();
            cb2.addItem("Fintas");
            cb2.addItem("Abdahll");
        }
    }
}

You could also make use of the actionCommand property, but the above is the simpler, immediate solution

Upvotes: 1

Related Questions