0

我的 JFrame 在某个坐标处有一个 JLabel(比如 label1),然后我有另一个 JLabel(比如 label2)正好位于 label1 的顶部(即它与 label1 具有完全相同的原点和大小)。

我已经注册了这两个标签来接收 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 之前添加的)。

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

任何帮助将不胜感激。

4

1 回答 1

3

但是当我点击标签时,只有 label1 得到通知(这是在 label2 之前添加的)。

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

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

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

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

于 2013-07-02T16:57:03.713 回答