我正在尝试创建一个MouseListener。当我将JButton悬停时,我希望它更改其背景颜色和数组中的下一个JButton。例如,当我将鼠标悬停在JButton[0][0]上时,它将更改JButton[0][0]JButton[1][0]JButton[2][0]等的背景。

这是我创建JButton数组的方法:

for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
        btn[i][j] = new JButton();
        btn[i][j].addMouseListener(this);
        btn[i][j].setBackground(Color.black);
        panel.add(btn[i][j]);
    }
}


及其MouseListener

@Override
public void mouseEntered(MouseEvent me) {
    JButton event = (JButton) me.getSource();
    int i = 0;
    int j = 0;
    btn[i][j] = event;
    btn[i][j].setBackground(Color.blue);
}

@Override
public void mouseExited(MouseEvent me) {
    JButton event = (JButton) me.getSource();
    int i = 0;
    int j = 0;
    btn[i][j] = event;
    btn[i][j].setBackground(Color.black);

}


我尝试做btn[i+1][j].setBackground(Color.black);,它设置了蓝色的[1][0][2][0] ...,但没有设置[i+1][j]

运行程序时没有错误。

 

上图显示了我正在尝试做的事情。

最佳答案

无需引用数组-您要做的只是更改通过getSource()返回的按钮的状态。例如。,

@Override
public void mouseEntered(MouseEvent me) {
    JButton event = (JButton) me.getSource();
    event.setBackground(Color.blue);
}


同样适用于mouseExited。

如果您需要了解特定鼠标的i和j,请使用嵌套的for循环遍历数组,

int i = 0;
int j = 0;
for (int i2 = 0; i2 < btn.length; i2++) {
    for (int j2 = 0; j2 < btn[i2].length; j2++) {
        if (event == btn[i2][j2]) {
            i = i2;
            j = j2;
        }
    }
}

// i and j set to appropriate value


或获取并设置按钮的客户端属性,类似于here一样。如果您需要更多详细的帮助,请创建并发布有效的minimal example program

10-07 19:10
查看更多