是否可能有一个全局鼠标运动监听器,根据点击的jpanel有不同的效果(只使用一个鼠标运动监听器)?
例如:我有一个jframe,在jframe中添加了两个jpanel和一个鼠标运动监听器。我希望当我单击一个jpanel时屏幕可以调整大小,但是我希望当我单击另一个jpanel时jframe可以被拖动。我认为这可以使用jlabel来完成,jlabel使用jlabel的文本进行检查,与jbutton相同。
编辑:是的,这绝对不是正确的做事方式,只是想知道这是否可能,如果可能,怎么可能?
编辑:为了让事情更清楚一点,我有一个类扩展了actionlistener,mousemotionlistener,mouselistener。有没有可能让这个类处理一个jframe的所有事件,这个jframe附带了许多不同的jpanel,并根据按下的jpanel做一些不同的事情(例如将一个id附加到jpanel上,我可以用它来比较event.getsource())
3条答案
按热度按时间pgccezyw1#
首先,一个“全局”的监听器,对不同的组件做不同的事情,是个坏主意,它把太多的逻辑放在一个单一的组件中,把代码耦合起来,成为维护的噩梦。
话虽如此,你可以用一个
MouseListener
添加到每个组件,例如。。。那你就可以简单的使用了
MouseEvent#getSource
以确定触发事件的组件。为了简单起见,我提供了name
对于每个面板,我会使用其他方法来确定组件,然后再决定要做什么。更好的解决办法是提供一个具体的
MouseListener
它根据需要对每个面板做了特定的工作,这就变得更易于管理、隔离责任、分离代码并更易于维护和管理6jygbczu2#
编辑2
这应该是你的答案,我在调试时注意到,当我点击框架上的空白区域时,我得到一个名为
"null.contentPane"
所以我把它放在条件下,它就起作用了!,我希望我能帮上忙。编辑1
我从你的评论中了解到,请尝试以下操作:
正常溶液
公共类panelslistener扩展了jframe{
huwehgph3#
我不确定这是否是最好的方法,但我只是测试了它,它确实有效,至少就我的代码测试而言。当按下鼠标时,找出鼠标在哪个框上,并相应地执行操作。