我正在尝试创建一个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