Swing中的按钮单击事件

时间:2013-03-07 17:38:57

标签: java swing chess

我使用JButton创建了棋盘,而我使用了ASCII值。

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

但问题是当我点击目标按钮actionPerformed事件被调用并且值被源按钮值替换时。

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

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

2 个答案:

答案 0 :(得分:2)

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

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

这样,在第一次单击时,您就知道了源的值,在第二次单击时,您知道目标的值。然后在下一次点击它再次是一个来源等。

答案 1 :(得分: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.
    }
}

您可以使用布尔值来表示您的状态,而不是枚举。但是如果将来需要其他状态,使用枚举可以实现更大的可扩展性。