可以在整个执行过程中禁用jToggleButton吗?

时间:2014-01-08 18:19:23

标签: 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 :(得分:2)

您似乎正在重新创建GUI,每次显示时都会显示切换按钮,您不应该这样做。

相反

  • 为此窗口创建变量
  • 考虑以懒惰的方式创建它 - 当且仅当它为空时才创建它
  • 否则如果不是null并且需要显示,只需通过setVisible(true)显示即可。
  • 并反过来通过setVisible(false)在需要时隐藏它。
  • 不要在您的应用程序中显示多个JFrame。相反,应用程序应该有一个主JFrame,然后你可以让它启动对话框窗口,如JDialogs,如果合适,或者在适当时通过CardLayout交换“views”。

具体做法是:

  • 使MainSelection变量,s,类的实例字段 - 声明它并在类中初始化一次
  • 仅在此方法中将其设置为可见。不要创建新的。
  • 将来,不要向用户吐出一堆JFrame,因为它是一个糟糕且烦人的用户界面。而是阅读CardLayout教程(Google将帮助您找到它),并使用它。使用代码来创建JPanel,而不是JFrame。

修改
你问:

  

我真的需要帮助Make MainSelection变量,s,类的实例字段 - 声明它并在类中初始化它一次。仅在此方法中将其设置为可见。不要创建一个新的。我如何使它成为实例字段?我还要在主选择表格或座位选择表格中声明它吗?

您正在执行以下操作:

public class Foo {

  private void someMethod() {
    // the code below creates a new SomeClass instance each time the method is called
    SomeClass localVariable = new SomeClass();
    localVariable.setVisible(true);
  }
}

而我建议您这样做:

public class Foo {
  // the code below creates a SomeClass instance only *once*.
  private SomeClass instanceField = new SomeClass();

  private void someMethod() {
    instanceField.setVisible(true);
  }
}

另外,你应该对你的重复帖子做点什么:

  • 首先关闭它 - 你不应该有多个同样的问题 - 这对我们和其他人都不公平。
  • 接受并在另一篇文章中对答案进行投票,以表达对海报帖子的努力和乐于助人的赞赏。