-1

こんにちは、私はこの単純な映画チケット システムを作成しています。私のプログラム フローは次のとおりであり、すべてのページは異なる JFrames にあります。

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 を表示しないでください。代わりに、アプリケーションには 1 つのメイン JFrame が必要であり、必要に応じて JDialogs などのダイアログ ウィンドウを起動したり、必要に応じて CardLayout を介して「ビュー」を交換したりできます。

具体的には:

  • MainSelection 変数 s をクラスのインスタンス フィールドにします。これを宣言し、クラスで一度初期化します。
  • このメソッドでのみ可視に設定してください。新しいものを作成しないでください。
  • 今後は、大量の JFrame をユーザーに吐き出さないでください。これは、ひどく迷惑なユーザー インターフェイスです。代わりに、CardLayout チュートリアル (Google が見つけるのに役立ちます) を読み、それを使用してください。JFrame ではなく、JPanel を作成するようにコードを調整します。

編集
あなたは尋ねます:

私は本当に助けが必要です MainSelection 変数 s をクラスのインスタンス フィールドにします。それを宣言し、クラスで一度初期化します。このメソッドでのみ可視に設定してください。新しいものを作成しないでください。インスタンスフィールドにするにはどうすればよいですか?? また、mainselection フォームまたは seatselection フォームで宣言しますか?

あなたは次のようなことをしています:

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);
  }
}

また、あなたの重複した投稿について何かをする必要があります:

  • 最初にそれを閉じてください。同じ質問を 2 つ以上持つべきではありません。それは私たちや他の人にとって公平ではありません。
  • そして、他の投稿の回答を受け入れて賛成票を投じて、投稿者の投稿の努力と有用性に感謝の意を表します.
于 2014-01-08T18:51:09.090 に答える