多个JLabel上的MouseListener未按预期工作

时间:2010-09-13 15:43:24

标签: java swing jlabel mouselistener

JLabelsJPanel内有5个JFrameJLabels。我使用for循环添加private JLabel target; // This is the origin of the first label added. Point origin = new Point(10, 20); // This is the offset for computing the origin for the next label. int offset = 200; for (int i = 0; i < layerColors.length; i++) { target = createColoredLabel(layerColors[i], origin, targetIcon); layeredPane.add(target, new Integer(i)); origin.x += offset; } // Create and set up a colored label with icon image. private JLabel createColoredLabel(Color color, Point origin, ImageIcon icon) { JLabel label = new JLabel(icon); label.setVerticalAlignment(JLabel.TOP); label.setHorizontalAlignment(JLabel.CENTER); label.setOpaque(true); label.setBackground(color); label.setBorder(BorderFactory.createLineBorder(Color.black)); label.setBounds(origin.x, origin.y, 175, 263); label.addMouseListener(this); return label; } ,循环遍历颜色数组:

JLabels

这会创建5个ImageIcon,每个JPanel分配给MouseListener,横向分布在@Override public void mouseClicked(MouseEvent e) { if (e.getSource().equals(target)) { Toolkit.getDefaultToolkit().beep(); } } 上。每个都添加了ImageIcon,但只有最后添加的标签会触发事件。

{{1}}

我有一个二级问题,涉及一个标签,其中包含{{1}}跟踪我的光标,当我将鼠标悬停在5个标签中的任意一个上时,该标记会停止。我想这是一个图层索引问题,但无法解决它。

非常感谢任何有关这些的帮助!

1 个答案:

答案 0 :(得分:2)

您的mouseClicked(MouseEvent evt)方法仅检查事件源是否是单个组件(目标),正如Geoffrey指出的那样,是您添加的最后一个标签。请尝试将其添加为mouseClicked方法的第一行。

System.out.println("Color: " + ((JLabel)evt.getSource()).getBackground());

注意:未经测试。希望Color有一个很好的toString()实现 注意2:如果您将该类作为鼠标侦听器添加到任何其他组件,则可能会获得ClassCastException