Java KeyEvent.getSource()和KeyEvent.getComponent()之间的差异
Java KeyEvent.getSource()和KeyEvent.getComponent()之间的差异,java,swing,keyevent,Java,Swing,Keyevent,KeyEvent.getSource()和KeyEvent.getComponent()之间有什么区别,使用哪一个以及何时使用? 我正在使用KeyEvents创建一些UI。 我得看看有没有功能 KeyEvent.getSource() KeyEvent.getComponent() 他很好奇什么时候该用哪个。 对java api的研究结果如下: 继承了EventObject的getSource(),描述如下: “事件最初发生的对象。” getComponent()继承自ComponentEven
KeyEvent.getSource()
和KeyEvent.getComponent()
之间有什么区别,使用哪一个以及何时使用?
我正在使用KeyEvents创建一些UI。
我得看看有没有功能
KeyEvent.getSource()
KeyEvent.getComponent()
他很好奇什么时候该用哪个。
对java api的研究结果如下:
继承了EventObject的getSource(),描述如下:
“事件最初发生的对象。”
getComponent()继承自ComponentEvent
“返回事件的发起人。”
现在在我看来,它们返回相同的对象,但类型不同
因此,问题是:这是正确的吗?我应该使用哪一个
getSource()
是AWTEvent
中提供的一个方法,它是所有事件类的抽象类。当您想知道是什么导致了该操作时,可以调用getSource()
方法。当您有一个可由按钮、文本字段或菜单项触发的actionEvent
时,这将非常有用。您可能想知道是哪个项目导致了操作激发,而此调用就是这样做的
此外,
getComponent()
方法将返回事件捕获的Component
对象。因此,在看到是什么导致动作触发的情况下,使用什么来获取与之交互的对象并没有真正的区别 来自彼此的Javadoc:
getSource(): 对象java.util.EventObject.getSource() 最初发生
事件的对象
返回:事件最初发生的对象
getComponent()
组件java.awt.event.ComponentEvent.getComponent()
返回事件的发起人
返回:引发事件的组件
对象,如果对象不是组件
,则返回null
结论:
getSource()
返回一个对象,该对象不能为null
,而getComponent()
返回一个Component
,有时,如果事件实例of Component==false
,则返回null
两者都需要铸造成您想要的类型。当然,事先检查实例总是好的。但是,getSource()
使您的应用范围更广,而且强制转换可能需要更长的时间,但不能是null
(据我所知)
因此,使用e.getSource()
总是更安全。在ComponentEvent中,KeyEvent的超类:
public Component getComponent() {
return (source instanceof Component) ? (Component)source : null;
}
protected transient Object source;
public Object getSource() {
return source;
}
在EventObject中,ComponentEvent(和KeyEvent)的祖辈:
JDK1.8.0_121附带的源代码
可以看出,只要是组件
,两者都返回相同的对象(source
),如果不是,则getComponent
返回null
您是正确的。通常,您希望编写尽可能少使用强制转换的代码;在编译时而不是运行时检查类型时,代码更健壮。