在JLabel放置在另一个JLabel之上的情况下,mouseClicked事件

时间:2013-07-02 16:46:34

标签: java swing event-handling jlabel mouseclick-event

我在某些坐标上的JFrame上有一个JLabel(比如label1),然后我有另一个JLabel(比如label2),它正好放在label1的顶部(即它与label1的原点和大小完全相同)。 / p>

我已注册这两个标签以接收mouseClicked事件。

label1 = new JLabel();
label1.setHorizontalAlignment(SwingConstants.CENTER);
label1.setName("label1");
label1.addMouseListener(this);
contentPane.add(label1);
label1.setBounds(0, 0, 40, 40);

label2 = new JLabel();
label2.setHorizontalAlignment(SwingConstants.CENTER);
label2.setName("label2");
label2.addMouseListener(this);
contentPane.add(label2);
label2.setBounds(0, 0, 40, 40);

但是当我点击标签时,只会通知label1(在label2之前添加)。

我正在寻找一个解决方案,以便我的标签对象得到通知。

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:3)

  

但是当我点击标签时,只会通知label1(在label2之前添加)。

Swing以与添加到面板相反的顺序绘制组件。因此标签2在标签1之前被绘制。这解释了为什么标签1得到了事件。

  

我正在寻找一个解决方案,以便我的标签对象得到通知。

将MouseListner添加到面板。然后,您需要遍历面板上的所有组件以查看该组件是否包含鼠标点。找到匹配项后,就可以进行处理了。

可能有更好的解决方案。你为什么需要这个?为什么使用null布局?