java - 我怎样才能得到一个按钮的数组#/使这个运行更有效

标签 java arrays jbutton delay

我正在制作一个复杂的井字游戏程序,它具有可变的网格大小和玩家数量。但是我的一位 friend 评论说,他们在 64 x 64 的空间中移动后 react 有点慢。我调查了一下,发现了问题,我的程序检查了网格中的每个按钮,看它是否被点击,然后它检查每个玩家,看看是谁移动的。一旦发现两者,它就会继续生活:D。但在处理较大的网格时,这可能需要一些时间。所以我尝试通过放置一些“中断”来修复它,但它们并没有帮助更快地找到它,只是停止寻找更快。

public void actionPerformed(ActionEvent gridButtonClicked) {
        for (int i = 0; i < gridButton.length; i++) {
            if (gridButtonClicked.getSource() == gridButton[i]) {
                for(int a = 0;a < amountOfPlayers;a++){
                    if(turn == a) {
                        gridButtonOwner[i] = a + 1;
                        gridButton[i].setBackground(playerColors[a]);
                        gridButton[i].setEnabled(false);
                        System.out.println("Grid " + i + ": " + gridButtonOwner[i]);
                        break;
                    }
                }
                break;
            }
        }
    }

我想知道的是,如果我能得到被点击的按钮的数组编号。比如 gridButtonClicked = gridButton[1],它会返回数字 1,或者如果它等于 gridButton[2],它会返回 2,等等。

  • gridButtonOwner 是一个整型数组,
  • gridButton 是一个 jbutton 数组。

最佳答案

我必须说我不明白循环的必要性。在第一个 for 循环中,您将获得网格按钮 - 但您知道这是什么,因为它是事件源......您可以将 GridButton 的映射存储到 Integer 上以获取位置在你的数组中。为什么要循环查找呢?在第二个循环中,你循环直到 a == turn...这意味着你已经知道 a 是什么,因为它 == turn .您应该能够完全删除循环:

// earlier on: myMap = new HashMap<GridButton, Integer>();
public void actionPerformed(ActionEvent gridButtonClicked) {
    GridButton gridButton = gridButtonClicked.getSource();
    int i = myMap.get(gridButton);
    gridButtonOwner[i] = turn + 1;
    gridButton.setBackground(playerColors[turn]);
    gridButton.setEnabled(false);
    System.out.println("Grid " + i + ": " + gridButtonOwner[i]);
}

关于java - 我怎样才能得到一个按钮的数组#/使这个运行更有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6038035/

相关文章:

java - 使用基本技术生成 10 个不重复的随机数

java - 从字节数组中获取文件名

java - 自定义 JButton 边框

java - 如何在扩展 JButton 类时扩展 actionPerformed 方法

java - 为什么ClassLoader中没有.getURLs()?

java - 是否可以将非 JavaFX 线程优先于 JavaFX 线程?

java - 用 CSV 数据填充 JTable 的简单方法

JavaFX:用键盘突然移动矩形会导致矩形变为 "stuck"

PHP 到 PostgreSQL 将未嵌套的数组插入多行

java - 涉及Swing的EDT的线程错误