我有一些关于Java事件监听器的问题...我有一些经验,但在学校我学习其他方式,我不得不问...这里是代码
lbl.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ ((Label)e.getComponent()).setText("Mouse clicked"); }});
为什么我需要使用" e.getComponent"当我知道是" lbl" ...我尝试没有并以相同的方式工作......
lbl.setText("Mouse clicked");
或
whatEverLbl.setText("someText");
在我使用它之前" e.getSource"当我为多个按钮制作一个方法时......比如
if((e.getSource)==" testButton")....
但为什么我在之前的例子中需要... 并且是" e.getSource"和" e.getComponent"是相同的......或者相同,因为我尝试了两者都是有效的......
如果我犯了咒语错误......
答案 0 :(得分:1)
首先,先看看MouseEvent#getComponent
。它只返回Component
。所以无论你知道什么,编译器都不知道事件的来源是什么"可能"是
请记住,这些API是在泛型和内部/匿名类支持可用之前设计的,因此所有侦听器接口都可以由类本身或单独的类实现。
并且是" e.getSource"和" e.getComponent"是相同的
是
您需要做的另一个考虑因素是,您可能有一个监听器负责监视多个组件,为每个组件执行专门(或常见)任务。
为什么我需要使用" e.getComponent"当我知道是" lbl" ...我尝试没有并以相同的方式工作......
好的,这又归结为这样一个事实:侦听器API会对语言进行一些更改,包括泛型,内部/匿名类以及编译器处理从匿名类引用的局部变量的方式的更改(或者更重要的是,开发人员不再需要将其标记为final
)
所以,采取"大多数"考虑到这一点: