如何使用 "for loop" 中的变量值进行 mouseEntered?
How to use the value of the variable from "for loop" for mouseEntered?
如何在 panelResult[i].addMouseListener 中获取 "for loop" 中用于 mouseEntered 的 "i" 变量?谢谢!
buttonCategory[0].addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
//hidden codes here...
panelCategory.remove(scrollPane);
panelCategory.add(scrollPane);
panelArray.removeAll();
panelResult = new JPanel[totalCount];
int y = 0;
for(int i = 0; i < panelResult.length; i++){
panelResult[i] = new JPanel();
panelResult[i].setLayout(null);
panelResult[i].setBackground(new Color(27, 182, 32));
panelResult[i].setBounds(0, y, 730, 200);
panelArray.add(panelResult[i]);
//hidden codes here...
panelResult[i].add(labelArrayResult);
panelResult[i].addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
panelResult[0].setBackground(Color.BLACK);
//if i change it to panelResult[i].setBackground(Color.BLACK); the "i" will be the error. i want to get the value of i from the panelResult[i].
revalidate();
repaint();
}
});
}
revalidate();
repaint();
}
revalidate();
repaint();
}
});
我还打算将它用于 mouseClicked 和 mouseExited。它是一个结果列表,这就是为什么它全部排列和循环的原因。
我得到的异常是:
Exception in thread "AWT-EventQueue-0"
java.lang.ArrayIndexOutOfBoundsException: 7
at ph.edu.tip.cpedepartment.cpepds.ProjectDesignPage.mouseEntered(ProjectDesignPage.java:233)
此外,面板的数量来自数据库的总数,这就是我需要使用索引的原因。再次感谢!
相信你可以使用鼠标事件源获取事件源:
public void mouseEntered(MouseEvent e) {
((JPanel)e.getSource()).setBackground(Color.BLACK);
//the index here is the error
revalidate();
repaint();
}
如果还是不行,我会试试 :
for(int i = 0; i < panelResult.length; i++){
//some hidden codes here...
final JPanel panel = panelResult[i];
panel.add(labelArrayResult);
panel.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
panel.setBackground(Color.BLACK);
//the index here is the error
revalidate();
repaint();
}
});
}
问题是,你为什么首先要 i
?您想要实际索引值,还是想要索引 i
处的 panelResult
?如果只是panelResult
你想要的,就采纳Eran的回答吧
否则,您可以将 i
值复制到侦听器的成员变量中,如下所示:
for (int i = 0; i < panelResult.length; i++) {
final int finalI = i;
// some hidden codes here...
panelResult[i].add(labelArrayResult);
panelResult[i].addMouseListener(new MouseAdapter() {
private int innerI = finalI;
@Override
public void mouseEntered(MouseEvent e) {
panelResult[innerI].setBackground(Color.BLACK);
revalidate();
repaint();
}
});
}
- 匿名内部class只能看到final变量,所以我创建
finalI
- 以后需要记住,所以创建
innerI
- 当然,这些变量的名称仍然可以自由选择。
如何在 panelResult[i].addMouseListener 中获取 "for loop" 中用于 mouseEntered 的 "i" 变量?谢谢!
buttonCategory[0].addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
//hidden codes here...
panelCategory.remove(scrollPane);
panelCategory.add(scrollPane);
panelArray.removeAll();
panelResult = new JPanel[totalCount];
int y = 0;
for(int i = 0; i < panelResult.length; i++){
panelResult[i] = new JPanel();
panelResult[i].setLayout(null);
panelResult[i].setBackground(new Color(27, 182, 32));
panelResult[i].setBounds(0, y, 730, 200);
panelArray.add(panelResult[i]);
//hidden codes here...
panelResult[i].add(labelArrayResult);
panelResult[i].addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
panelResult[0].setBackground(Color.BLACK);
//if i change it to panelResult[i].setBackground(Color.BLACK); the "i" will be the error. i want to get the value of i from the panelResult[i].
revalidate();
repaint();
}
});
}
revalidate();
repaint();
}
revalidate();
repaint();
}
});
我还打算将它用于 mouseClicked 和 mouseExited。它是一个结果列表,这就是为什么它全部排列和循环的原因。
我得到的异常是:
Exception in thread "AWT-EventQueue-0"
java.lang.ArrayIndexOutOfBoundsException: 7
at ph.edu.tip.cpedepartment.cpepds.ProjectDesignPage.mouseEntered(ProjectDesignPage.java:233)
此外,面板的数量来自数据库的总数,这就是我需要使用索引的原因。再次感谢!
相信你可以使用鼠标事件源获取事件源:
public void mouseEntered(MouseEvent e) {
((JPanel)e.getSource()).setBackground(Color.BLACK);
//the index here is the error
revalidate();
repaint();
}
如果还是不行,我会试试 :
for(int i = 0; i < panelResult.length; i++){
//some hidden codes here...
final JPanel panel = panelResult[i];
panel.add(labelArrayResult);
panel.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
panel.setBackground(Color.BLACK);
//the index here is the error
revalidate();
repaint();
}
});
}
问题是,你为什么首先要 i
?您想要实际索引值,还是想要索引 i
处的 panelResult
?如果只是panelResult
你想要的,就采纳Eran的回答吧
否则,您可以将 i
值复制到侦听器的成员变量中,如下所示:
for (int i = 0; i < panelResult.length; i++) {
final int finalI = i;
// some hidden codes here...
panelResult[i].add(labelArrayResult);
panelResult[i].addMouseListener(new MouseAdapter() {
private int innerI = finalI;
@Override
public void mouseEntered(MouseEvent e) {
panelResult[innerI].setBackground(Color.BLACK);
revalidate();
repaint();
}
});
}
- 匿名内部class只能看到final变量,所以我创建
finalI
- 以后需要记住,所以创建
innerI
- 当然,这些变量的名称仍然可以自由选择。