1

JButton私はASCII 値を使用してチェス盤を作成しました。

ActionListenerすべてのボタンに追加しました。ソース(最初の)ボタンをクリックするactionPerformedと、イベントが呼び出され、ボタンの値が変数に保存されました。

しかし、問題は、目的のボタンをクリックしたときにactionPerformedイベントが呼び出され、値がソースボタンの値に置き換えられたときです。

ソースボタンの値と宛先ボタンの値が異なる変数に必要です。それはどのように可能ですか?

public void actionPerformed(ActionEvent ae) 
{
    JButton o = (JButton) ae.getSource();
    value = o.getText();
}
4

2 に答える 2

2

次に、2 つの値を格納する 2 つの変数と、どのクリックが発生したかを示す 3 つ目の変数が必要です。

     if(isSource){
         source = o.getText();
         isSource = false;
     }else{
         destination = o.getText();
         isSource = true;
     }

このように、最初のクリックでソースの値がわかり、2 回目のクリックで宛先の値がわかります。次にクリックすると、再びソースになります。

于 2013-03-07T17:47:26.767 に答える
1

アプリケーションの状態を何らかの方法で管理する必要があります。最初のクリックで、アプリケーションの状態は、移動のソースの情報を待機していることです。その後、移動先の情報を待ちます。

次のように、クラスに列挙型を作成できます。

enum ActionState {
    SOURCE,
    DESTINATION
}

そして、アクション状態とボタン変数をクラスのメンバーとして保存します。

ActionState state = SOURCE;

String source;
String destination;

その場合、actionPerformedは次のようになります。

public void actionPerformed(ActionEvent ae) 
{
    JButton o = (JButton) ae.getSource();
    String value = o.getText();

    if (state == SOURCE){
        source = value;
        state = DESTINATION;
    }
    else if (state == DESTINATION){
        destination = value;
        state = SOURCE;
        // you probably want to call something here to perform the move itself.
    }
}

列挙型の代わりに、ブール値を使用して状態を表すことができます。ただし、列挙型を使用すると、将来他の状態が必要になった場合に拡張性を高めることができます。

于 2013-03-07T17:49:46.750 に答える