2

所以我的问题是只有某些组件的某些区域是可点击的。我有这 3 个课程:

下面是所有这些组合在一起的图像:

可点击区域

但正如你所知道的,有粉红色区域(我在粉红色内添加),粉红色区域表示组件可点击的位置。例如,如果您查看注册按钮,您可能会注意到按钮顶部有一个粉红色区域,这意味着您只能单击粉红色区域范围内的按钮。您还可以在最右侧看到列表的粉红色区域,表明只有在粉红色区域的范围内单击它时,它才会按照应有的方式运行。

我的问题是,为什么它会这样?我希望它像任何其他组件一样发挥作用,我真的很好奇为什么它只能从那些特定区域做出正确反应。我已经考虑过可能存在某些组件重叠的可能性,但是在每个组件周围绘制边框之后,肯定没有任何重叠。

如果有人可以帮助我解决我的问题并告诉我任何可能的解决方案,将不胜感激,谢谢。

如果您有任何其他问题,请随时提出。

编辑:我做了一些小发现;我尝试向按钮添加鼠标侦听器并打印出按钮的边界以及我单击的位置。然后我添加了一个简单的 if 语句,说明如果按钮的边界包含我单击的点,则打印出如下语句:

System.out.println(registerButton.getBounds());
System.out.println(e.getPoint());
System.out.println(registerButton.getBounds().contains(e.getPoint()));

这是一个示例输出:

java.awt.Rectangle[x=1,y=115,width=498,height=42]
java.awt.Point[x=383,y=47]
false

正如你所看到的,没有输出语句说它在界限内。这很奇怪,因为这个鼠标监听器只添加到注册按钮,所以它只会在你点击注册按钮时触发。但这很奇怪,因为如果您通过查看注册按钮的边界和您单击的点来比较 y 值,它们会非常不同。您可以单击按钮的 y 值范围是 115 到 157。但是它表示鼠标位置的 y 值是 57,当然 57 < 115。所以没有重叠问题,只有一个抵消问题似乎。有人知道如何解决这个问题吗?

注意:我想我只是注意到了一些东西;我只在寄存器面板中添加了一个鼠标侦听器,并且只是在寄存器面板中添加了一个鼠标侦听器,然后我单击了寄存器面板的左上角(期望它是 0,0)但是当它打印出这个点时,它是(3,30 ) 所以这意味着有一个偏移量,并且由于这个偏移量,鼠标认为它不是它所在的某个地方,导致只有顶部区域是可点击的。但是现在我知道了问题所在,我不知道如何解决这个问题。任何想法将不胜感激。

4

0 回答 0