编程麻烦动作监听器?

时间:2013-06-20 21:45:52

标签: java swing

我试图制作一款名为ratsuk的游戏。它像国际象棋,但只与骑士。我对骑士的运动有问题。有时当我按下按钮时,其他骑士出现了它不应该(我不想这样)我很确定它与动作监听器的一个问题是它的运行方法caballo一次不止一次。但我无法弄明白。我非常绝望,请帮助我。我是java的新手。

这是我需要帮助的部分。

public void caballo(final int row, final int column) {

    final JButton current = mesa[row][column];

    current.setIcon(image);
    panel.repaint();

    acciones(row, column, current);
}

public void acciones(final int row, final int column, final JButton current) {

    for (int i = 0; i < HEIGHT; i++) {
        for (int j = 0; j < WIDTH; j++) {
            mesa[i][j].addActionListener(e(row, column, current));
        }
    }
}

public ActionListener e(final int row, final int column,
        final JButton current) {
    return new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            if (tienebotton(row + 2, column + 1)) {
                if (e.getSource() == mesa[row + 2][column + 1]) {

                    current.setIcon(null);
                    caballo(row + 2, column + 1);
                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }
            if (tienebotton(row + 2, column - 1)) {
                if (e.getSource() == mesa[row + 2][column - 1]) {

                    current.setIcon(null);
                    caballo(row + 2, column - 1);

                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }
            if (tienebotton(row - 2, column - 1)) {
                if (e.getSource() == mesa[row - 2][column - 1]) {

                    current.setIcon(null);
                    caballo(row - 2, column - 1);

                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }
            if (tienebotton(row - 2, column + 1)) {
                if (e.getSource() == mesa[row - 2][column + 1]) {

                    current.setIcon(null);
                    caballo(row - 2, column + 1);

                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }

            if (tienebotton(row + 1, column + 2)) {
                if (e.getSource() == mesa[row + 1][column + 2]) {

                    current.setIcon(null);
                    caballo(row + 1, column + 2);

                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }
            if (tienebotton(row - 1, column + 2)) {
                if (e.getSource() == mesa[row - 1][column + 2]) {

                    current.setIcon(null);
                    caballo(row - 1, column + 2);

                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }
            if (tienebotton(row + 1, column - 2)) {
                if (e.getSource() == mesa[row + 1][column - 2]) {

                    current.setIcon(null);
                    caballo(row + 1, column - 2);

                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }
            if (tienebotton(row - 1, column - 2)) {
                if (e.getSource() == mesa[row - 1][column - 2]) {

                    current.setIcon(null);
                    caballo(row - 1, column - 2);

                    ((AbstractButton) e.getSource()).setEnabled(false);

                }
            }
        }

    };
}

欢迎任何形式的建议。

这是我所说的tienebotton所以它没有给我数组索引超出界限:

public boolean tienebotton(int row, int column) {
        return (row >= 0 && row < HEIGHT && column >= 0 && column < WIDTH);

    }
}

1 个答案:

答案 0 :(得分:0)

之后的每个后续if语句中都会有一个改进
if (tienebotton(row+2, column+1)) {...}

更改为

else if ...

这将确保只触发其中一个。