我的用户故事如下:
为了升级塔,玩家必须从商店拖出一把枪并将其放在塔上。
实际上,GameView
同时包含BattlefieldCanvas
和ShopView
。此外,ShopView
包含每个可购买枪支的GunSelector
。所有这些人都是JPanel
的子类。
我目前正在使用MousListener
来处理对BattlefieldCanvas
执行的多项操作;我以为我可以使用相同的东西来处理从GunSelector
到BattlefieldCanvas
之一(=跨越几个面板)的鼠标之旅,所以我尝试将相同的MousListener
添加到枪支选择器和战场。
问题:不起作用。当鼠标在战场上实际释放时,事件对象的getSource()
方法返回对枪选择器的引用。
PS:与枪选择器不同,塔不是摆动组件,而是由paintComponent
方法绘制的图像。
答案 0 :(得分:1)
1)回答原始问题,为什么源仍然是组件鼠标被点击。您只需阅读JavaDoc:
即可public Object getSource()
最初发生事件的对象。
返回: 事件最初发生的对象。
2)现在,我们如何获得释放鼠标的实际组件。您可以尝试这种方法:
@Override
public void mouseReleased(MouseEvent e) {
Component theCOmponentMouseIsReleasedOn = frame.findComponentAt( e.getLocationOnScreen() );
}
您不需要始终在框架上致电findComponentAt
,您可以拨打包含BattlefieldCanvas
的容器。