【问题标题】:How to prevent ArrayOutOfBoundsException? [duplicate]如何防止 ArrayOutOfBoundsException? [复制]
【发布时间】:2014-10-12 17:34:27
【问题描述】:

我有一个GridLayout,里面填满了JButton。当我按下一个按钮时,我想取消激活除了与单击的JButton 相邻的按钮之外的所有按钮。我有这个代码:

btnLetter.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {


                        for (int i = 0; i < tab.length; i++) {
                            for (int j = 0; j < tab.length; j++) {
                                tab[i][j].setEnabled(false);
                                for (int ii = 0; ii < tab.length; ii++) {
                                    for (int jj = 0; jj < tab.length; jj++) {
                                        if (tab[ii][jj] == (JButton) e.getSource()) {

                                            tab[ii][jj + 1].setEnabled(true);
                                            tab[ii + 1][jj + 1].setEnabled(true);
                                            tab[ii + 1][jj].setEnabled(true);
                                            tab[ii - 1][jj].setEnabled(true);
                                            tab[ii - 1][jj + 1].setEnabled(true);
                                            tab[ii - 1][jj - 1].setEnabled(true);
                                            tab[ii][jj - 1].setEnabled(true);
                                            tab[ii + 1][jj - 1].setEnabled(true);
                                        }
                                    }
                                }

                            }
                        }
                    }

                }
            });

【问题讨论】:

  • ii == 0 时,ii - 1 的值是多少?使用for/each 循环,您将不会有这些one off errors

标签: java arrays jbutton actionlistener


【解决方案1】:

您必须处理单击的按钮位于第一行/最后一行/列的情况,在这种情况下,添加/减去一个可能会将您带出数组边界。

例如,在调用tab[ii + 1][jj + 1].setEnabled(true) 之前,您必须验证ii &lt; tab.length-1jj &lt; tab.length-1

【讨论】:

  • 我想要做的是停用除相邻按钮之外的所有按钮,所以如果我点击按钮 tab[0][0],我想要 tab[0][1], tab[ 1][0] 和 tab[1][1] 被激活。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 2013-04-04
  • 1970-01-01
  • 2023-01-08
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
相关资源
最近更新 更多