Java 将一个JLabel放置在另一个JLabel上时发生鼠标单击事件

Java 将一个JLabel放置在另一个JLabel上时发生鼠标单击事件,java,swing,event-handling,jlabel,mouseclick-event,Java,Swing,Event Handling,Jlabel,Mouseclick Event,我在JFrame的特定坐标上有一个JLabel(比如label1),然后我有另一个JLabel(比如label2),它正好位于label1的顶部(即,它的原点和大小与label1完全相同) 我已注册这两个标签以接收mouseClicked事件 label1 = new JLabel(); label1.setHorizontalAlignment(SwingConstants.CENTER); label1.setName("label1"); label1.addMouseListener(t

我在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之前添加的)

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

任何帮助都将不胜感激

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

Swing按组件添加到面板的相反顺序绘制组件。因此,标签2在标签1之前上漆。这解释了标签1获取事件的原因

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

将鼠标指示器添加到面板中。然后,需要在面板上的所有组件之间循环,以查看该组件是否包含鼠标点。找到匹配项后,您将进行处理

也许有更好的解决办法。你为什么需要这个?为什么要使用空布局

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

Swing按组件添加到面板的相反顺序绘制组件。因此,标签2在标签1之前上漆。这解释了标签1获取事件的原因

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

将鼠标指示器添加到面板中。然后,需要在面板上的所有组件之间循环,以查看该组件是否包含鼠标点。找到匹配项后,您将进行处理


也许有更好的解决办法。你为什么需要这个?为什么要使用空布局

我不明白如果他点击一个标签,为什么会通知另一个标签?@nachokk,我同意,这听起来像是一个糟糕的设计,这就是为什么我要求澄清要求。+1用于Swing Paint组件,顺序与添加到面板的顺序相反。。感谢您的解释。实际上,构建一个游戏,其中每个玩家的令牌都是一个图像,因此放置在一个JLabel中。另外,玩家的令牌可以杀死对手的令牌,同时我检查有效的杀死,我想将对手的令牌存储在一个JLabel中,作为玩家1的令牌存储在另一个JLabel中。基本上一个隐藏另一个。解释了使用Swing的基本原理。理解一些基本概念将有助于设计。我不明白如果他点击一个标签,为什么会通知另一个标签?@nachokk,我同意,这听起来像是一个糟糕的设计,这就是我要求澄清要求的原因。+1用于Swing Paint组件,顺序与添加到面板的顺序相反。。感谢您的解释。实际上,构建一个游戏,其中每个玩家的令牌都是一个图像,因此放置在一个JLabel中。另外,玩家的令牌可以杀死对手的令牌,同时我检查有效的杀死,我想将对手的令牌存储在一个JLabel中,作为玩家1的令牌存储在另一个JLabel中。基本上一个隐藏另一个。解释了使用Swing的基本原理。理解一些基本概念将有助于设计。Java GUI可能需要在多种平台上工作,使用不同的屏幕分辨率&使用不同的PLAF。因此,它们不利于部件的精确放置。要组织一个健壮的GUI组件,请使用布局管理器或它们的组合,以及空白区域的布局填充和边框。Java GUI可能必须在多种平台上工作,使用不同的屏幕分辨率和不同的PLAF。因此,它们不利于部件的精确放置。要为健壮的GUI组织组件,请使用布局管理器或它们的组合,以及空白的布局填充和边框。