1

我已经使用 ASCII 值创建了棋盘,JButton并且对于棋子我使用了 ASCII 值。

我添加ActionListener了所有按钮。当我单击源(第一个)按钮actionPerformed事件被调用并且我将按钮的值存储在变量中。

但问题是当我单击目标按钮actionPerformed事件时,会调用源按钮值并将值替换为源按钮值。

我想要不同变量中的源按钮值和目标按钮值。怎么可能?

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

2 回答 2

2

然后,您需要 2 个变量来存储这两个值,并需要第三个变量来告诉您发生了哪个点击。

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

这样,第一次点击你就知道源的价值,第二次点击你就知道目的地的价值。然后在下一次单击时,它又是一个来源,等等。

于 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 回答