单选按钮在组合框中显示值

radio button show values in combo box

我对这个 if-else 感到困惑,因为我是 Java 和 MySQL 的新手,我试图自己制作它。

public Menu() {
        initComponents();
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/restaurant", "root", "");
            System.out.println("ODBC Connection Successful");

            showCategory();

        } catch (ClassNotFoundException | SQLException e) {
            System.out.println("ODBC Connection Failed" + e);

        }
    }

如果-否则

private void showCategory() {
        try {
            Statement stmt;
            stmt = con.createStatement();

            if (rbMFood.isSelected()) {
            ResultSet rs = stmt.executeQuery("SELECT * FROM menu_cat WHERE type_id = 'TY02'");
            while (rs.next()) {
                cmbMCat.addItem(rs.getString("menu_cat"));
            }

        } else {
            ResultSet rs = stmt.executeQuery("SELECT * FROM menu_cat WHERE type_id = 'TY01'");
            while (rs.next()) {
                cmbMCat.addItem(rs.getString("menu_cat"));
            }

            }
        } catch (Exception e) {

        }
    }

单选按钮

private void rbMFoodActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
        type = "Food";
    }                                       

    private void rbMDrinkActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        type = "Drink";
    }

然后我在程序最后声明函数

private String type;

当我点击饮料/食品时,类别仍然是饮料的类别。

数据库

如有任何帮助,我们将不胜感激!

您使用的是 rs.getString("menu_cat") 但格式是 rs.getString(<Column Name>) 但是您使用的是 rs.getString(<Table Name>) 因为 "menu_cat" 是 table 的名称而不是名称列的。

发布构造函数后

我从您发布的代码中看到的是,您在构造函数中调用了 showCategory()。此方法负责填充 JComboBox cmbMCat。现在,当您创建新的 Menu 时,会填充 cmbMCat。之后 cmbMCat 的项目列表不会改变。

所以,我建议您从 rbMFoodActionPerformedrbMDrinkActionPerformed 方法中调用 showCategory()。我希望这能解决你的问题。

还在 Statement stmt; 之前添加 cmbMCat.removeAllItems() 以删除 cmbMCat 中的所有项目,并用新的项目列表重置它。

关于 if-else

的评论之后

改变 showCatagory() 如下:

private void showCategory() {
        cmbMCat.removeAllItems();
        try {
            PreparedStatement stmt; //Used Prepared statement
            String sql = "SELECT * FROM menu_cat WHERE type_id = ?";
            stmt = con.prepareStatement(sql);

            if (type.equals("Drink")) {
                stmt.setString("TY01");    
            } else {
                stmt.setString("TY02");
            }
                ResultSet rs = stmt.executeQuery();
                while (rs.next()) {
                    cmbMCat.addItem(rs.getString("menu_cat"));
                }

            }
        } catch (Exception e) {

        }
    }

另请注意,您的 eventListener 代码应为:

private void rbMFoodActionPerformed(java.awt.event.ActionEvent evt){                                        
    type = "Food";
    showCategory();
}                                       

private void rbMDrinkActionPerformed(java.awt.event.ActionEvent evt){                                         
    type = "Drink";
    showCategory();
}