【问题标题】:Reservation application, disable button when condition reached预约申请,达到条件时禁用按钮
【发布时间】:2018-07-17 07:53:22
【问题描述】:

我想创建一个简单的预订应用程序,例如当您想在线预订电影票时,除了这是一个非常简化的版本。

我有一个带有 8 个切换按钮和 1 个按钮的班级名称预订,用户可以输入他们想在另一个班级预订的座位号,比如说 4。 在预订时,用户选择了 4 个座位后,切换按钮的其余部分将被禁用,以防止用户选择更多座位。然后用户将单击保存按钮,然后将数据输入到数据库中。下次当另一个用户打开预订时,所有切换按钮都将重新启用,显然之前的用户已提前预订的 4 个座位除外。 到目前为止一切正常,除了我加粗的部分。

这是我的代码:

private static final JToggleButton[] btn = new JToggleButton[8];
private int totalrow, a;
java.sql.Connection connection = null;
Statement statement4 = null;
ResultSet resultSet = null;

private void formWindowActivated(java.awt.event.WindowEvent evt) {  // This is where i load the information that has been saved in the database before.                                   
    
    try {
        
        connection = DriverManager.getConnection("jdbc:derby:
        statement4 = (Statement) connection.createStatement();
        resultSet = statement4.executeQuery("SELECT reservationid, seatno, validator FROM reservation WHERE reservationid = '" + time.id + "'");
        
        String seatno, validator, rsid, id;
        
        btn[0] = seat1;
        btn[1] = seat2;
        btn[2] = seat3;
        btn[3] = seat4;
        btn[4] = seat5;
        btn[5] = seat6;
        btn[6] = seat7;
        btn[7] = seat8;
        
        int i = 0;
        while(resultSet.next()){
            seatno = resultSet.getString("seatno");
            validator = resultSet.getString("validator");
            rsid = resultSet.getString("reservationid");
            
            if(seatno.equals(btn[i].getText()) && validator.equals("reserved")){ //checking if seat i is reserved
                btn[i].setSelected(true);
            }
            else{
                btn[i].setSelected(false);
            }
            i++;
        }
        
    } catch (SQLException ex) {
         Logger.getLogger(seat.class.getName()).log(Level.SEVERE, null, ex);
    }
}   

public void actionPerformed(ActionEvent e) { // This actionlistener is used to count, if User has choose 4 seats, the code will disable the rest of the button
    
    try {
        connection = DriverManager.getConnection("jdbc:derby://localhost:1527/Project","root","root");
        statement = (Statement) connection.createStatement();
        
        btn[0] = seat1;
        btn[1] = seat2;
        btn[2] = seat3;
        btn[3] = seat4;
        btn[4] = seat5;
        btn[5] = seat6;
        btn[6] = seat7;
        btn[7] = seat8;
        
        a = 0;
        for(JToggleButton btns : btn){
            if (btns.isSelected()){
                a++;
                System.out.println(a);
                
                if (! btns.isSelected()){
                    System.out.println(a);
                    a--;
                }
            }  
        }
        
        for(JToggleButton btns : btn){
            if (a >= Integer.parseInt(BookingUI.passenger)){ // This is number of Passenger taken from another class. In this case is 4.
                if(! btns.isSelected()){
                    btns.setEnabled(false);
                }
            }
            
            else{
                btns.setEnabled(true);
            }
        }
        
    } catch (SQLException ex) {
        Logger.getLogger(seat.class.getName()).log(Level.SEVERE, null, ex);
    }
}  

关于我的标题,根据我当前的代码和逻辑,可能无法重新启用切换按钮。因此,更好的方法可能是使用另一种逻辑来禁用切换按钮。

image 中,座位 1、4、5、8 由用户选择。其余的按钮都被禁用了

【问题讨论】:

  • 如果我没有解释清楚请告诉我
  • 您能否提供您构建的用户界面的屏幕截图以便更好地理解
  • 是的,你能告诉我如何在评论部分/我的帖子中插入屏幕截图。以前没做过
  • 这很容易。只需单击以编辑您自己的问题,在编辑窗口中,您将看到几个用于编辑选项的按钮,例如螺栓、下划线、插入链接和插入图像的图标。当你点击它时,你会得到一个弹出窗口来上传图片:)
  • 是的。还包括一些信息,我想知道为什么它没有显示出来

标签: java


【解决方案1】:

由于这是一个漫长的实现,很难用代码解决方案来回答。在那里我会在这里提到我的建议。

您必须像 btn = new JToggleButton[8]; 这样在每个类都可以访问它的公共静态上下文中声明您的 JToggleButton 数组。当用户预订座位时,您应该将数据保存到数据库中(或保存在程序内存中,例如:HashMap),哪个用户预订了哪个座位。

之后,当您从数据库加载数据时,您应该循环并获取先前插入的预订座位,然后通过访问该预定义 JToggleButton 数组 并通过执行此操作设置每个预订座位 @987654323 @(i 为座位的预订索引)。
希望这会有所帮助

【讨论】:

  • 我不太明白,你的建议和我现在做的有什么区别?关于 JToggleButton 数组,我已将其声明为公开的,尽管我没有在我的帖子中展示它。但据我所知,分配它不能公开进行。
  • 我假设你知道 java.util 中的 static 关键字。通过定义 JToggleButtons 公共静态,您可以从任何地方访问它并获取任何数据。不要在方法内定义您的 JToggleButtons。在类级别定义它,但作为一个公共静态
  • 我在帖子中编辑了我的代码。你是这个意思吗?
  • 部分是的。但是您还没有添加 static 关键字来使其成为静态的。请参考此链接以熟悉静态 stackoverflow.com/questions/4449935/…
  • 酷,这对我来说是新的,谢谢。回到你的建议,你还没有回答我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 2021-09-28
  • 2021-01-06
  • 2021-08-31
相关资源
最近更新 更多