禁用jToggleButton

时间:2014-01-08 19:59:43

标签: java swing jtogglebutton

嘿,伙计们,所以我正在制作这个简单的电影票务系统 我的程序流程如下,所有页面都在不同的JFrame中:主菜单>选择日期>选择电影>选择座位>返回MainMenu

我在座位选择器中使用JToggle。一旦选定,是否可以在整个执行过程中禁用切换按钮?我正在使用JToggleButton.setEnabled(false);但是每次我回到菜单并回到座位选择器时,按钮仍然没有被禁用。我想要做的就是在我回到MainMenu后禁用它,所以当我回到座位选择器时,我不能再选择这个座位了。

下面是一些代码:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    this.setVisible(false);
    MainSelection s =  new MainSelection();
    s.setVisible(true);

     if(jToggleButton1.isSelected())

    {
        jToggleButton1.setEnabled(false);
    }

    if(jToggleButton2.isSelected())

    {
        jToggleButton2.setEnabled(false);
    }

    if(jToggleButton3.isSelected())

    {
        jToggleButton3.setEnabled(false);
    }

}                                        

请查看

1 个答案:

答案 0 :(得分:1)

好吧,JToggleButton的“已启用”属性很可能在您将其设置为true时不会将自身重置为false。我认为您实际上正在查看其他 JToggleButton的实例。也许你每次访问“选择座位”GUI时都重新创建它? 在这种情况下,您想要的是从用户界面中分离应用程序数据(您有关于已预留哪个座位的信息等)。

我认为,这样做的好方法是使用模型 - 视图 - 控制器模式。 让我向您介绍这种设计模式:

  • 模型保存您的应用数据(例如,可以是Set<Seat>
  • 查看用于显示您的数据(即您的JToggleButton
  • 控制器是您的模型更新的入口点(在您的情况下,这些也是JToggleButton

您可以在那里阅读更多相关信息:MVC Pattern - tutorialspoint

基本上,您不是每次都创建一个新的“空”查看,而是要使用数据容器包含的值(模型)加载它。然后,当您点击代表座位的某个JToggleButton控制器)时,您不会直接更改按钮的状态,而只需更新模型切换座位的状态(保留与否)。然后,每次更新模型时,您的查看都会使用可用的新数据进行刷新。就是这样!

+--------------------------------------+
|    +-----------+                     |
|    |   Model   <-------+             |
|    +-----v-----+       |             |
|          |             |             |
|          |             |             |
|    +-----v---+---------^----------+  |
|    |  View   |     Controller     |  |
|    +---------+--------------------+  |
|                                      |
+---------- Your application ----------+

随意提出更多相关信息,它可能看起来真的很多,但它带有许多有趣的设计功能:) 特别是如果您需要另一个查看(例如,每次进行更改时您希望保存数据的File)!