仅在循环中创建的最后一个JLabel上检测到MouseListeners

Ter*_*ryN 2 java user-interface swing jlabel mouselistener

我在添加MouseListenersJlabels循环内创建的一定数量的问题时遇到了问题.我正在创建的程序需要JLabel在用户将鼠标悬停在标签上时更改a的图标.

我创建了一个for循环来初始化一个全局声明的标签,设置一个边框,添加一个鼠标监听器并将标签添加到面板.

JLabel label;
for(int i = 0; i < 20; i++)
{
  label = new JLabel();
  label.setBorder(new LineBorder(Color.BLACK));
  label.setMouseListener(this);
  panel.add(label);
}
container.add(panel);
Run Code Online (Sandbox Code Playgroud)

然后我的老鼠听众

public void mouseEntered(MouseEvent e)
{
  if(e.getSource().equals(label))
  {
     label.setIcon(image);
  }
}
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,它为帧添加了20个标签并添加了边框但由于某种原因,动作侦听器仅在添加的最后一个标签上被激活.任何人都可以告诉我为什么会这样或者指出我正确的方向吗?

任何帮助表示赞赏.

Sta*_*avL 5

((JLabel)e.getSource()).setIcon(image);


Hov*_*els 5

您只有一个JLabel被label变量引用,最后一个使用,因此if块将测试源是最后一个JLabel.换句话说,你的代码只是做你要告诉它的事情.如果阻止你想用什么来完成?