1

メインクラスで複数のウィンドウを管理しているプロジェクトに取り組んでいます。タイトルからわかるように、ウィンドウの JButton に問題があります。メイン メソッドは、特定のボタンが押されるのを待ちます。

public static void main(String[] args){
    ButtonWindow bw = new ButtonWindow();
    while(bw.buttonClicked() == false);
    System.out.println("ok cool");
}

一方、ボタンの ActionListener は、ブール値 d (メソッド buttonClicked() が返すもの) をトリガーして true に設定します。

public boolean d = false;
public ButtonWindow(){
    JPanel cp;
    JButton b;
    setContentPane(cp = new JPanel());
    cp.add(b = new JButton("Click me"));
    b.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
            d = true;
        }
    });
    setSize(200, 200);
    setVisible(true);
}
public boolean buttonClicked() {
    return d;
}

ここで、main メソッドが while ループでスタックしているように見えます。「d」が変更されたので、これはどのように可能ですか (ボタンの ActionListener で「System.out.println("" + d);」を追加してチェックインしました)。

前もって感謝します

ああ、また、これを行うよりスマートな方法はありますか? このメソッドを継続的に呼び出すことは、実際に最も実用的なことだとは思いません。

4

2 に答える 2

0

あなたはこれをしているはずです:

public static void main(String[] args){
    ButtonWindow bw = new ButtonWindow();       
}

public void actionPerformed(ActionEvent e) {
if(e.getSource().getText().equals("Click me"))
System.out.println("ok cool");

}

2 番目のアプローチ:-

flag変数を staticにし、新しいスレッド クラスを作成し、クラスflag変数の値を継続的にチェックするスレッドを使用してループします。flag変数をインスタンス変数にすることもできますが、その場合、オブジェクト参照をスレッド間で共有する必要があります。

于 2013-06-08T11:07:45.143 に答える