-1

大家好,我正在制作这个简单的电影票务系统我的程序流程如下,所有页面都在不同的 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);
    }

}                                        

请检查一下

4

1 回答 1

2

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

反而

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

具体来说:

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

编辑
你问:

我真的需要帮助 使 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);
  }
}

此外,您应该对您的重复帖子做一些事情:

  • 首先关闭它——你不应该有多个相同的问题——这对我们和其他人都不公平。
  • 并接受并投票给其他帖子中的答案,以表达对发布者帖子的努力和乐于助人的感谢。
于 2014-01-08T18:51:09.090 回答