Java windowbuilder组合框操作执行问题

Java windowbuilder组合框操作执行问题,java,swing,combobox,actionlistener,Java,Swing,Combobox,Actionlistener,我正在研究一个简单的医院预约系统。我的组合框相互依赖。 问题是,当我单击城市组合框并选择一个城市时,它也会进入county actionListener。为什么? private void initialize() { City cities = new City(); Hospital hospitals = new Hospital(); frame = new JFrame(); frame.setBounds(100, 100, 450, 300); frame.setDefaul

我正在研究一个简单的医院预约系统。我的组合框相互依赖。

问题是,当我单击城市组合框并选择一个城市时,它也会进入county actionListener。为什么?

private void initialize() {

City cities = new City();
Hospital hospitals = new Hospital();

frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);

JLabel lblCity = new JLabel("City");
lblCity.setBounds(25, 25, 25, 14);
frame.getContentPane().add(lblCity);

JComboBox<String> cityBox = new JComboBox<String>(); // CITY

JComboBox<String> hospitalBox = new JComboBox();
hospitalBox.setBounds(99, 141, 265, 22);
frame.getContentPane().add(hospitalBox);

JComboBox<String> comboClinic = new JComboBox<String>(); // CLINIC
comboClinic.setEditable(true);
comboClinic.setBounds(99, 101, 265, 22);
frame.getContentPane().add(comboClinic);  // CLINIC

JComboBox<String> countyBox = new JComboBox<String>();  // COUNTY
countyBox.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // do something
});
countyBox.setEditable(true);

countyBox.setBounds(99, 61, 265, 22);
frame.getContentPane().add(countyBox); // COUNTY

cityBox.setEditable(true);  // CITY

cityBox.addItem("Istanbul");
cityBox.addItem("Ankara");
cityBox.addItem("Izmir");

cityBox.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        if (cityBox.getSelectedItem().equals("Istanbul")) {
            countyBox.removeAllItems(); hospitalBox.removeAllItems();
            String istanbul[] = cities.getIstanbul();
            countyBox.setSelectedItem("Select county");
            
            for (int i = 0; i < istanbul.length; i++) countyBox.addItem(istanbul[i]);
            comboClinic.setSelectedItem("Select clinic");
        }
        else if(cityBox.getSelectedItem().equals("Ankara")) {
            countyBox.removeAllItems(); hospitalBox.removeAllItems();
            String ankara[] = cities.getAnkara();
            countyBox.setSelectedItem("Select county");
            
            for (int i = 0; i < ankara.length; i++) countyBox.addItem(ankara[i]);
            comboClinic.setSelectedItem("Select clinic");
        }
        else if(cityBox.getSelectedItem().equals("Izmir")) {
            countyBox.removeAllItems(); hospitalBox.removeAllItems();
            String izmir[] = cities.getIzmir();
            countyBox.setSelectedItem("Select county");
            
            for (int i = 0; i < izmir.length; i++) countyBox.addItem(izmir[i]);                 
            comboClinic.setSelectedItem("Select clinic");
        }
            
    }
});
cityBox.setSelectedItem("Select City");

cityBox.setBounds(99, 21, 265, 22);
frame.getContentPane().add(cityBox); // CITY   
private void initialize(){
城市=新城();
医院=新医院();
frame=新的JFrame();
机架立根(100450300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JLabel lblCity=新JLabel(“城市”);
lblCity.立根(25,25,25,14);
frame.getContentPane().add(lblCity);
JComboBox cityBox=新JComboBox();//城市
JComboBox hospitalBox=新JComboBox();
医院信箱(9914126522);
frame.getContentPane().add(hospitalBox);
JComboBox comboClinic=新建JComboBox();//诊所
comboClinic.setEditable(true);
挫折(9910126522);
frame.getContentPane().add(comboClinic);//CLINIC
JComboBox countyBox=新的JComboBox();//县
addActionListener(新ActionListener()){
已执行的公共无效操作(操作事件e){
//做点什么
});
countyBox.setEditable(真);
退步数(99,61,265,22);
frame.getContentPane().add(countyBox);//COUNTY
cityBox.setEditable(true);//城市
城市邮箱地址(“伊斯坦布尔”);
城市邮箱地址(“安卡拉”);
城市邮箱地址(“伊兹密尔”);
addActionListener(新的ActionListener(){
已执行的公共无效操作(操作事件e){
if(cityBox.getSelectedItem().equals(“伊斯坦布尔”)){
countyBox.removeAllItems();hospitalBox.removeAllItems();
字符串istanbul[]=cities.getIstanbul();
countyBox.setSelectedItem(“选择县”);
对于(int i=0;i<伊斯坦布尔长度;i++)countyBox.addItem(伊斯坦布尔[i]);
comboClinic.setSelectedItem(“选择诊所”);
}
else if(cityBox.getSelectedItem().equals(“Ankara”)){
countyBox.removeAllItems();hospitalBox.removeAllItems();
字符串ankara[]=cities.getAnkara();
countyBox.setSelectedItem(“选择县”);
对于(int i=0;i

正如您在这里看到的,当我选择一个城市时,它会安排城市和县,但它也会进入县actionListener,在事件处理块中,您可以进行以下调用:

countyBox.setSelectedItem("Select county");
根据JComboBox上的javadoc

当调用此方法时,添加到组合框的ActionListeners将收到ActionEvent通知


因此,您添加到
countyBox
中的
ActionListener
正在响应。

请显示您的代码,以便我们可以看到您在做什么来回答您。@TimHunter您好,我添加了我的代码。正如您在那里看到的,当我选择一个城市时,它会安排城市和县,但它也会进入县ActionListener。Require红色..保持标记的焦点(没有看到任何与javafx相关的内容,只有swing)@kleopatra抱歉,你能帮我解决这个问题吗?非常感谢!你不知道我现在有多高兴!当我删除setSelectedItem行时,它起了作用!