-1

重複の可能性:
ループ内でボタンが押されるのをどのように待つことができますか?

この質問は以前に尋ねられたと思いますが、私の状況を解決する回答は見つかりませんでした。

私は現在、ユーザーが移動したい駒を保持している正方形の座標を入力できるチェスプログラム(コマンドライン)を持っています。最初はこのように機能します。

boolean success;
do {
    success = true;

    // take in coordinates;

    // perform checks such as not empty square etc;

    if (/*problem found*/) {
        // print error message;
        success = false;
    }
}
while (!success);

これは、ループが実行されるたびにプログラムが実行を一時停止してユーザーが座標を入力するのを待つため、コマンドラインで実行する場合に最適です。ただし、ボタンとアクションリスナーを使用してGUIでこれを実装したいと思います。最も便利な解決策は、次のようなものに置き換えられる入力座標セクション以外のコードを変更しないことです。

pause program;
user presses button which sets coordinates;
when button pressed program continues;
perform checks…;

これはどのように行うことができますか?ボタンが押されるのを待つというJavaのメソッドはありますか?この方法では、GUIのペイントなど、プログラムの他の部分が停止しないようにする必要があります。

4

1 に答える 1

0

「一時停止」は必要ないと思います。ボタンがクリックされたときに関数を呼び出す必要があります。実行するアクションを関数に入れてから、リスナーの実装からこの関数を呼び出すことができます。あなたの例がボタンを言うように、あなたはあなたのフレームオブジェクトにActionListenerを実装することができます、そしてそれからactionPerformed()関数はあなたの関数を呼び出します。

public class GUI extends JFrame implements ActionListener{
    //...
    Button b;
    public GUI(){
        //...
        b = new Button();
        this.getContentPane().add(b);
        this.addListener(b);
        //...
    }
    //...
    public void actionPerformed(ActionEvent e){
        if(e.getSource()==b){
            // your TODO list here
        }
    }
}
于 2012-12-04T16:52:52.933 に答える