java - Chess GUI - 在调用函数之前获得 2 次用户点击 - Java

标签 java user-interface actionlistener chess

我正在尝试制作一个简单的国际象棋 GUI,它仅包含一个 gridLayout,其中每个方 block 都由一个按钮组成,每个按钮都有一个 ActionListener 并且独立于实际游戏工作,仅“打印出”中发生的情况Board 类。

private JButton[][] squares = new JButton[8][8];
private Color darkcolor = Color.decode("#D2B48C");
private Color lightcolor = Color.decode("#A0522D");
public ChessGUI(){
    super("Chess");
    contents = getContentPane();
    contents.setLayout(new GridLayout(8,8));

    ButtonHandler buttonHandler = new ButtonHandler();

    for(int i = 0; i< 8; i++){
        for(int j = 0;j < 8;j++){
            squares[i][j] = new JButton();
            if((i+j) % 2 != 0){
                squares[i][j].setBackground(lightcolor);
            }else{
                squares[i][j].setBackground(darkcolor);
            }
            contents.add(squares[i][j]);
            squares[i][j].addActionListener(buttonHandler);
            squares[i][j].setSize(75, 75);

        }
    }
    setSize(600, 600);
    setResizable(true);
    setLocationRelativeTo(null);
    setVisible(true);
}
private class ButtonHandler implements ActionListener{
    public void actionPerformed(ActionEvent e){
        Object source = e.getSource();
        for(int i = 0;i< 8; i++){
            for(int j = 0;j < 8;j++){
                if(source == squares[i][j]){
                    //Pass set of coordinates to game.Move(...)
                    return;
                }
            }
        }
    }
}

我需要将 2 组坐标,“从”和“到”传递给 game.Move(...) 函数(应用游戏移动逻辑的函数),其中每组坐标由一个给出单击按钮。

我应该如何处理在调用 game.Move(...) 函数之前需要等待用户单击两次的事实?好像一次只能传递一组坐标。

如有任何帮助,我们将不胜感激。

最佳答案

在游戏对象中,您可能应该有字段变量来存储起始坐标和终止坐标,而不是将它们传递给 game.move 函数。你可以做一个从0开始的计数器。当它为0时,它将处理“from”点击(将Game中的“from”变量设置为被点击的坐标),当它为1时,它将处理“from”点击(将Game中的“from”变量设置为被点击的坐标)。 “to”点击(在游戏中设置“to”变量),调用移动,并将计数器重置回 0。

关于java - Chess GUI - 在调用函数之前获得 2 次用户点击 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49959152/

相关文章:

swift - 在 SwiftUI 中,如何增加按钮的高度?

java - JButton 在 Action 监听器和鼠标监听器完好无损的情况下不执行任何操作

java - 如何使用非抽象类实现 ActionListener? java

java - FLEX - 将 AsyncToken 转换为 ArrayCollection

java - 如何将第三方 jar 添加到本地 Maven 存储库?

java - Realm DB 在 Android 中变得疯狂

Android GridLayout - 如何增加列或行之间的间距?

java - 如何持续观察对象直到 onError()/取消订阅

python - 如何使单个 Tkinter 列表框元素出现换行符?

java - 从外部 Action 监听器访问 Jtextfield