首页 > 解决方案 > Java - jComboBox1 上的 ActionEvent 以更新 jComboBox2 - 键盘/鼠标-输入键条件

问题描述

我有两个 jComboBox,(1 和 2)

根据 1 中的选择,它会更新 2。我面临的问题是 2 上的更新是通过数据库查询完成的。因此,如果有人选择第一个组合框并开始输入以选择他们想要的内容,它会在每次按键/更新选择时触发数据库查询。这并不理想。

解决此问题的一种方法是使用 ActionEvent 来测试它是使用鼠标还是键盘选择的。

private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           

    if (evt.getModifiers() == 0) {
        // Do nothing because keyboard is pressed
    } else {
        Object item = jComboBox1.getSelectedItem();
        try{
        // DATABASE CONNECTION HERE
        // Load up jComboBox2
            jComboBox2.removeAllItems();
            while(rs.next())
            {
                jComboBox2.addItem(rs.getString(1));
            } 
            //Close and catch exceptions etc.

是否可以有条件}else{才能说

}else if(keyboardpressed(VK_ENTER) or mouseclick) {

原因是用户通常会在第一个组合框中键入选择,然后按回车键进行选择。目前他们必须伸手去拿鼠标来选择。

标签: javaswing

解决方案


我认为您不应该允许从第一个组合框中进行查询,除非用户选择列出的项目或点击有效文本条目ENTER上的键。您的组合框是否有自动完成功能?甚至可能禁用第二个组合框,直到从第一个组合框做出有效选择

请改用ItemStateChanged事件:

 private void jComboBox1ItemStateChanged(java.awt.event.ItemEvent evt) {                                            
    // Prevent double selection from event.
    if(evt.getStateChange() == ItemEvent.SELECTED) {
        System.out.println(jComboBox1.getSelectedItem().toString());
        // Or whatever you want to do with the selection.
    }
}              

推荐阅读