Java、MySQL : how to connect dependent combobox based on another one

标签 java mysql vector jcombobox

我正在寻找如何在第一个组合框上执行 ActionPerformed 以便过滤下一个组合框。这是基于Mysql的。 我使用以下代码来填充第一个组合,效果很好

Vector<String> comboBoxItems = new Vector<String>();
final DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>(comboBoxItems);
        try {
            new MconnectionDB();
        } catch (SQLException e2) {
            e2.printStackTrace();
        }
        PreparedStatement st1 = null;
        ResultSet rs1=null;
        String strPro = "";

        String sql1 ="select distinct T_AdressePro from t_adresse order by T_AdressePro";

        try {
            st1= MconnectionDB.con.prepareStatement(sql1);
            rs1 = st1.executeQuery();
        } catch (SQLException e1) {
            e1.printStackTrace();
        }

        try {
            while (rs1.next()){
                strPro =rs1.getString("T_AdressePro");
                comboBoxItems.add(strPro);  
                comboBoxPro= new JComboBox<String>(model);  
            }

        } catch (SQLException e) {
        e.printStackTrace();
        }finally {
            try {
                rs1.close();
                st1.close();
                new MdeconnectionDB();
            }   
            catch (SQLException e) {
                e.printStackTrace();
            }
        }

然后,我在第一个组合的 ActionPerformed 中添加另一个类似的代码来过滤第二个组合:

    comboBoxPro.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent arg0) {  
            Vector<String> comboBoxItemsC = new Vector<String>();
            final DefaultComboBoxModel<String> modelC = new DefaultComboBoxModel<String>(comboBoxItemsC);

            String strCir = "";
            PreparedStatement st2 = null;
            ResultSet rs2=null;

            String sql2 ="select distinct T_AdresseCir from t_adresse where T_AdressePro=? order by T_AdresseCir";

            try {
                new MconnectionDB();
            } catch (SQLException e2) {
                e2.printStackTrace();
            }
            comboBoxPro.getSelectedItem();
            strProCombo = comboBoxPro.getSelectedItem().toString();
            System.out.println(strProCombo);

            try {

                st2= MconnectionDB.con.prepareStatement(sql2);
                st2.setString(1, strProCombo); //strProCombo
                rs2 = st2.executeQuery();
            }catch (SQLException e1) {
                e1.printStackTrace();
            }

            try {
                while (rs2.next()){
                    System.out.println(rs2.getString("T_AdresseCir"));
                    strCir =rs2.getString("T_AdresseCir");
                    comboBoxItemsC.add(strCir); 
                    comboBoxCir= new JComboBox<String>(modelC); 
                }

            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                try {
                    rs2.close();
                    st2.close();
                    new MdeconnectionDB();
                    }   
                    catch (SQLException e) {
                        e.printStackTrace();
                    }
            }
        }                   
});

我注意到以下代码“System.out.println(rs2.getString("T_AdresseCir"));”返回预期结果,但不返回组合框。还是空的。请您支持,谢谢。

最佳答案

在您的 actionPerformed 方法中,您正在创建新的 JComboBox,但没有将其添加到 gui 中。这可能就是您看不到其内容的原因。您应该创建新的 ComboBoxModel 并将其设置在现有的 JComboBox 上。您可能应该使用 try with resources也使您的代码更具可读性。

伪代码(我没有你的数据库):

// create new model for your comboBox
DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();

// fill model with data
try (Connection con = /*get connection to your db by any means necessary*/;
    PreparedStatement stmt = con.prepareStatement(/*your query*/);
    ResultSet rs = stmt.executeQuery();) {

    while (rs.next()) {
        model.addElement(rs.getString(/*your column*/));
    }

    comboBox.setModel(model); // set model for your JComboBox

} /*catch and all that*/
// no need for finally because try-with-resources.

关于Java、MySQL : how to connect dependent combobox based on another one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39274676/

相关文章:

java - KDB +tick - 更新未从代码工厂流向 RDB

没有用逗号分隔的 Java JPA Left Join

Java:如何插入N:M关联表

c++ - vector 下标超出范围 - 冒泡排序 - 改进

c++ - 在 std::vector 中存储 __m256i 仅在 Release模式下产生访问冲突

Java 整数金字塔

java - 通过 Scanner 读取大量输入

java - WebDriverWait 在 Selenium 4 中已弃用

MySQL并不总是使用索引

r - 使用纬度和经度向量查找 R 中的步行距离