Java: 使用 MouseListener 改变相邻 JButton 的颜色

Java: Using MouseListener to change the color of adjacent JButtons

我有一个 JButton 的 15 x 15 二维数组。

当我按住其中一个按钮(即 Button[i][j])时, 我想更改相邻按钮的颜色(即 Button[i-1][j]Button[i+1][j]Button[i][j-1]Button[i][j+1])。

我该怎么做?

下面是我实现二维数组的部分。该按钮暂时没有任何作用。

    fb = new JButton[15][15];

    for(int i = 0; i < 15; i++){
        for(int j = 0; j < 15; j++){
            fb[i][j] = new JButton();
            fb[i][j].setBackground(Color.WHITE);
            fb[i][j].setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
            fb[i][j].setPreferredSize(new Dimension(40, 40));
            //fb[i][j].setEnabled(false);
            grid.add(fb[i][j]);
        }
    }

试试这个块:

            if (i - 1 >= 0) {
                if (fb[i - 1][j] != null) {
                    fb[i - 1][j].setBackground(Color.RED);
                }
            } else if (i + 1 < 15) {
                if (fb[i + 1][j] != null) {
                    fb[i + 1][j].setBackground(Color.RED);
                }
            } else if (j - 1 >= 0) {
                if (fb[i][j - 1] != null) {
                    fb[i][j - 1].setBackground(Color.RED);
                }
            } else if (j + 1 < 15) {
                if (fb[i][j + 1] != null) {
                    fb[i][j + 1].setBackground(Color.RED);
                }
            }

和听众:

            fb[i][j].addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    JButton b = (JButton) e.getSource();
                    int x, y;
                    for (int i = 0; i < 15; i++) {
                        for (int j = 0; j < 15; j++) {
                            if(fb[i][j].equals(b)){
                                x = i;
                                y = j;
                                break;
                            }
                        }
                    }

                    if (x - 1 >= 0) {
                    if (fb[x - 1][y] != null) {
                        fb[x - 1][y].setBackground(Color.RED);
                    }
                    } else if (x + 1 < 15) {
                        if (fb[x + 1][y] != null) {
                            fb[x + 1][y].setBackground(Color.RED);
                        }
                    } else if (y - 1 >= 0) {
                        if (fb[x][y - 1] != null) {
                            fb[x][y - 1].setBackground(Color.RED);
                        }
                    } else if (y + 1 < 15) {
                        if (fb[x][y + 1] != null) {
                            fb[x][y + 1].setBackground(Color.RED);
                        }
                    }

                }
            });