使用jcombobox过滤java for country - state-city的代码

时间:2013-08-26 17:25:57

标签: java mysql swing jcombobox

在我的项目中,我想要选择填写有用于COUNTRY,STATE,CITY的jcombobox 当我点击counrty然后它应该在那个国家显示相关的国家有多少,然后同样的状态也适用于城市

这是我的代码告诉我哪里出错了,这对于这个

是什么样的代码
private void cmbcountryPopupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) {                                                        
       try{
            //JOptionPane.showMessageDialog(null,"hello");
            String sql= "SELECT StateName From state where Country_Id=? ";
            prst=con.prepareStatement(sql);
            prst.setString(1, cmbcountry.getSelectedItem().toString());
            prst.execute();
            rs=prst.executeQuery();

            if(rs.next()){                   
                    cmbstate.setSelectedItem(rs.getString("state"));                        
            }
        } catch(Exception e)
            {
            JOptionPane.showMessageDialog(null,e);
        }

       fillstate(cmbcountry.getSelectedIndex());

    }  

1 个答案:

答案 0 :(得分:0)

你的问题不是很清楚,但我认为你有三个组合框。国家,州和城市,您希望根据所选国家和城市在所选国家的基础上居住国家。 如果这是你想要的,那么最简单的选择是: //注意使用while而不是if会有多个值

cmbstate.removeAllItems();
Vector<String> items = new Vector<String>();
while(rs.next())
{                   
   items.addElement(rs.getString("state"));                        
}
ComboBoxModel model = new DefaultComboBoxModel(items);
cmbState.setModel(model);

同样适用于选择州的城市组合框。

每次创建一个新模型不是最佳方式,因此另一个选项可能是从循环中调用cmbState.addItem(String);。 在任何情况下,您可能需要从正在播放的组合框中删除侦听器,因为在您对数据进行任何更改时会触发侦听器。你可以这样做:

ItemListener [] itemListeners = cmbState.getItemListeners(); for(ItemListener l:itemListeners)    cmbState.removeItemListener(升); //在这里用组合做你想做的事。 for(ItemListener l:itemListeners)    cmbState.addItemListener(升);