两个JComboBox组件A和B,当A选中一项后,B根据A的选中项,从数据库中查询,并填入B中。
现在的问题是希望A选中后才去查询,如果通过在A上加ActionListener或ItemChangeListener监听器,当用键盘的上下方向键在A上移动时,也会触发相应的时间,也就是会去查询数据库,我希望是在用户用上下键选中某项后回车后再去查询数据库,并且用鼠标选择也可以,像这种情况如何实现?

解决方案 »

  1.   

    import java.awt.FlowLayout;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JLabel;public class ItemEventTest {
    private JFrame frame;
    private JLabel proLabel,cityLabel;
    private JComboBox proBox,cityBox;
    private String[] proStr;
    private String[][] cityStr;


    public ItemEventTest(String[] proStr,String[][] cityStr){
    frame=new JFrame("Item Event Test!");
    proLabel=new JLabel("省份:");
    cityLabel=new JLabel("城市:");

    this.proStr=proStr;
    this.cityStr=cityStr;
    proBox=new JComboBox(proStr);
    cityBox=new JComboBox(cityStr[0]);
    frame.setLayout(new FlowLayout());

    frame.add(proLabel);
    frame.add(proBox);
    frame.add(cityLabel);
    frame.add(cityBox);
    }

    public void addEventHandler(){

    proBox.addItemListener(new ItemListener(){
    public void itemStateChanged(ItemEvent arg0) {
    int index=proBox.getSelectedIndex();
    cityBox.removeAllItems();
    for(int i=0;i<cityStr[index].length;i++){
    cityBox.addItem(cityStr[index][i]);
    }
    }
    });
    }

    public void showMe(){
    addEventHandler();
    frame.setSize(400,300);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args){
    String[] proStr={"山东","山西","河北","河南","江苏","浙江"};
    String[][] cityStr={
    {"济南","烟台","青岛","潍坊","泰安"},
    {"太原","大同","平遥","临汾","晋中"},
    {"石家庄","保定","唐山","邯郸","秦皇岛"},
    {"郑州","安阳","洛阳","开封","南阳"},
    {"南京","苏州","扬州","常州","无锡"},
    {"杭州","温州","宁波","金华","义乌"}
    };
    new ItemEventTest(proStr,cityStr).showMe();
    }}这里是用数组实现级联的,LZ可以根据从数据库查询结果来更改一下就OK了