0

私が現在書いているプログラムには、2 つの JFrames があります (それぞれが異なるクラスにあり、それぞれに異なる目的がありますが、ウィジェット フレームはある種のスレーブと見なすことができます)。1 つはメイン ウィンドウです。もう 1 つは、メイン ウィンドウのボタンを押すとポップアップする「ウィジェット」です。一度に開くウィジェットのコピーは 1 つだけです。私は現在、actionPerformed アクションリスナーの下でブール変数を使用してこれを行っています。以下は、メイン ウィンドウのアクション リスナーです。

   public void actionPerformed(ActionEvent e) {

                   if(getOpenWidget() == false){ 
                       System.out.println(getOpenWidget()); //test line
                       widget.initialize(); // please note that the instance "widget" is declared just after "public class MainWindow{"  :)
                       widget.frame.setVisible(true);
                       setOpenWidget(true);
                       System.out.println(getOpenWidget() ); // test line

                   }else{
                       System.out.println(getOpenWidget());
                       JOptionPane.showMessageDialog(frame, "There is already an instance of the Booking Widget open.");
                   }
               }

これで予約ウィジェットが開きました。予約ウィジェットにはキャンセル ボタンがあります。以下は、ウィジェットの「キャンセル」ボタンのアクション リスナーです。

    btnCancel.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            MainWindow ui = new MainWindow();
            frame.dispose();
            ui.setOpenWidget(false);
        }
    }

ここで、メイン ウィンドウのボタンをもう一度押すと、理論的には、openWidget bool は false で、別のウィンドウを開くことができるはずですが、キャンセル ボタン アクション リスナーでは、変数は変更されません。それで、私は openWidget を静的変数にせずに正しい方法で問題に取り組んでいますか? (ゲッターとセッターを正しく使用する必要がありますか?)そのボタンをクリックするたびにウィンドウ?

また、私のゲッターとセッターは、次のように標準装備されています。

void setOpenWidget(boolean val){
    this.openWidget = val;
}

boolean getOpenWidget(){
    return this.openWidget;
}
4

3 に答える 3

0

MainWindow の参照を Widget クラスに渡すだけで、キャンセル ボタンでフラグを更新できます。

于 2013-03-29T05:03:16.117 に答える
0

setOpenWidget(false)この行を使用して作成した他の新しいインスタンスを呼び出していますMainWindow ui = new MainWindow();

setOpenWidget(false)ウィジェットを初期化したのと同じインスタンスを使用して呼び出す必要があります。ウィジェットの作成中に MainWindow の参照をウィジェットに渡し、その参照をsetOpenWidget(false)使用して呼び出します

于 2013-03-29T05:08:49.620 に答える
0

widget内部のオブジェクトを作成するときは、次のMainWindowように呼び出すことができます。

widget = new Widget(this);

ウィジェット ウィンドウ コンストラクターを次のように変更します。

MainWindow ui;
public Widget(MainWindow mw) 
{
  this.ui = mw;
  //...initialize btnCancel...
  btnCancel.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            frame.dispose();
            ui.setOpenWidget(false);
        }
    });
  //..do all other stuffs here...
}
于 2013-03-29T05:10:39.617 に答える