【问题标题】:JComboBox ExecuteQuery selecting Items errorJComboBox ExecuteQuery 选择项目错误
【发布时间】:2019-02-04 16:33:53
【问题描述】:

我有 3 个 jComboBox。第一个是房间类型。当我在第一个 jComboBox 上选择房间类型时,它必须在第二个 jComboBox 中显示所有可用房间,但是当我选择其中一个房间类型时,会弹出一个错误。p

这是在第一个 jComboBox 上执行的操作代码

第一个 jComboBox actionperformed*

    if(jComboBox13.getSelectedItem().toString().equals("SELECT")){

    }else{
            try{
            String like = jComboBox13.getSelectedItem().toString();
            String sql = "Select * From Room_Master\n" +
                         "inner join Room_Type on Room_Master.Room_Type_ID=Room_Type.Room_Type_ID\n" +
                         "where Room_Type = '"+like+"'";
            pst = conn.prepareStatement(sql);
            rs = pst.executeQuery();
            jComboBox14.removeAllItems();
            jComboBox14.addItem("SELECT");
        while(rs.next()){
            String add1 = rs.getString("Room_No.");
            jComboBox14.addItem(add1);
        }
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
        }finally {
            try {
               rs.close();
               pst.close();
            }catch(Exception e){

            }
        }
    }

第二个 jComboBox actionperformed

if(jComboBox14.getSelectedItem().toString().equals("SELECT") | jComboBox14.getSelectedItem().toString().isEmpty()){

    }else{
            try{

            String like = jComboBox14.getSelectedItem().toString();
            String sql = "Select * from Bed_Master\n" +
                         "inner join Room_Master on Bed_Master.Room_ID=Room_Master.Room_ID\n" +
                         "where [Room_No.] = '"+like+"'";
            pst = conn.prepareStatement(sql);
            rs = pst.executeQuery();
            jComboBox15.removeAllItems();
            jComboBox15.addItem("SELECT");
        while(rs.next()){
            String add1 = rs.getString("Bed_No.");
            jComboBox15.addItem(add1);
        }
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
            e.printStackTrace();
        }finally {
            try {
               rs.close();
               pst.close();
            }catch(Exception e){

            }
        }
    }

但是在我选择另一个房间类型后它会起作用 我试图删除“combobox.removeAllItems();” 但它会继续添加 jCombobox 中的所有项目 将近 1 周的时间试图弄清楚有人可以帮忙

【问题讨论】:

  • 您似乎收到了NullPointerException。请将该异常的堆栈跟踪添加到问题中。 (要获得该堆栈跟踪,您必须将 e.printStackTrace(); 添加到代码中的第一个 catch 块。)
  • 我会从 rs.getString("Room_No."); 中删除 .
  • 你能帮我解决这个问题吗?我该怎么办?
  • 嗯?我刚刚告诉过你。
  • 如果我删除它,我如何将项目放在 jComboBox 上?

标签: java sqlite


【解决方案1】:

当您调用removeAllItems 时,它会触发jComoboBox14 的actionListener 在这个阶段它不会有任何项目,所以getSelected 将返回NULL

将您的 if 更改为

if(jComboBox14.getItemCount() > 0 && (jComboBox14.getSelectedItem().toString().equals("SELECT") |
                                             jComboBox14.getSelectedItem().toString().isEmpty())){

【讨论】:

  • 有什么方法可以让我在第一个 jComboBox 上选择时不会将第二个 jComboBox 设置为空
  • 不要打电话给removeAllItems ?
  • 但它会保留并复制 jCombobox 中的项目先生
  • 如果您按照我的答案中发布的代码进行操作,它将解决您的问题(其他情况也需要扩展)
  • 好吧,在这种情况下,请发布您拥有的代码,以便进行更多调试。
【解决方案2】:

首先。你应该给你的对象变量一个有用的名字: 例如:jComboBox13 --> JComboBox comboRoomsType = new JComboBox(); 或您喜欢的任何名称。

然后,很高兴看到所有涉及的代码。我看不到你在哪里初始化 ResultSetPreparedStatement;

我猜 NullPointer 在尝试检索值时来自 select 语句。

if(jComboBox13.getSelectedItem().toString().equals("SELECT")){

}else{
        try{
        String like = jComboBox13.getSelectedItem().toString();
        String sql = "Select * From Room_Master RM " +
                     "inner join Room_Type RT on RM.Room_Type_ID=RT.Room_Type_ID " 
                     +"where Room_Type = '"+like+"'";
        pst = conn.prepareStatement(sql);
        rs = pst.executeQuery();
        jComboBox14.removeAllItems();
        jComboBox14.addItem("SELECT");
     //you can also check if there are values first.
    while(rs.hasNext()){
        rs.next();
        String add1 = rs.getString("Room_No");
       //You can also use 
       //String add1 = rs.getInt(number of column of <Room_No> );
        jComboBox14.addItem(add1);
    }
    }catch(Exception e){
        e.printStackTrace();
        JOptionPane.showMessageDialog(null, e);
    }finally {
        try {
           rs.close();
           pst.close();
        }catch(Exception e){

        }
    }
}

【讨论】:

  • @DummyDummy 请添加导致错误的房间类型值。
猜你喜欢
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多