KeyEvent.getSource()
和KeyEvent.getComponent()
之间的区别是什么,使用哪个以及何时使用?
我正在使用KeyEvents创建一些UI。
我必须看到有功能
KeyEvent.getSource()
KeyEvent.getComponent()
并且很好奇在何时使用。
对java api的研究得出以下结论:
getSource()是为EventObject继承的,具有以下描述:
“事件最初发生的对象。”
getComponent()继承自ComponentEvent
“返回事件的发起者。”
现在我觉得他们会返回不同类型的同一个对象。
因此问题:这是对的,我应该使用哪一个?
答案 0 :(得分:0)
来自here:
getSource()
是AWTEvent
中提供的方法,它是所有事件类的抽象类。当您想知道导致该操作的原因时,可以调用getSource()
方法。当您拥有可由按钮,文本字段或菜单项触发的actionEvent
时,这将非常有用。您可能想知道导致操作触发的项目,此调用会执行该操作
此外,getComponent()
方法将返回事件捕获的Component
对象。因此,在查看导致触发操作的原因的情况下,用于获取与之交互的对象的内容并没有真正的区别。
答案 1 :(得分:0)
来自彼此的Javadoc:
<强>的getSource():强>
Object java.util.EventObject.getSource()
最初发生
Event
的对象。返回:最初发生
Event
的对象。
<强> getComponent()强>
组件java.awt.event.ComponentEvent.getComponent()
返回事件的发起者。
返回:发起事件的
Component
对象,如果对象不是null
,则返回Component
。
结论:
getSource()
会返回Object
,但不能null
,getComponent()
会返回Component
,有时会返回event instanceof Component == false
},它返回null
。
两者都需要输入您想要的类型。当然,预先instanceof
检查总是好的。但是,getSource()
可以让您的范围更广,而且投射可能需要更长时间,但不能null
(根据我的理解)。
因此,使用e.getSource()
总是更安全。
答案 2 :(得分:0)
在ComponentEvent中,KeyEvent的一个超类:
public Component getComponent() {
return (source instanceof Component) ? (Component)source : null;
}
在EventObject中,ComponentEvent(和KeyEvent)的祖父母:
protected transient Object source;
public Object getSource() {
return source;
}
随JDK 1.8.0_121 提供的 源代码
可以看出,只要它是source
,它们都会返回相同的对象(Component
),如果不是,getComponent
会返回null
。