JLabels
内JPanel
内有5个JFrame
。JLabels
。我使用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个标签中的任意一个上时,该标记会停止。我想这是一个图层索引问题,但无法解决它。
非常感谢任何有关这些的帮助!
答案 0 :(得分:2)
您的mouseClicked(MouseEvent evt)
方法仅检查事件源是否是单个组件(目标),正如Geoffrey指出的那样,是您添加的最后一个标签。请尝试将其添加为mouseClicked
方法的第一行。
System.out.println("Color: " + ((JLabel)evt.getSource()).getBackground());
注意:未经测试。希望Color有一个很好的toString()实现
注意2:如果您将该类作为鼠标侦听器添加到任何其他组件,则可能会获得ClassCastException
。