KeyEvent.getSource()和KeyEvent.getComponent()之间的区别

时间:2016-09-08 16:24:04

标签: java swing keyevent

KeyEvent.getSource()KeyEvent.getComponent()之间的区别是什么,使用哪个以及何时使用? 我正在使用KeyEvents创建一些UI。 我必须看到有功能  KeyEvent.getSource()  KeyEvent.getComponent() 并且很好奇在何时使用。 对java api的研究得出以下结论:  getSource()是为EventObject继承的,具有以下描述:  “事件最初发生的对象。”  getComponent()继承自ComponentEvent  “返回事件的发起者。”

现在我觉得他们会返回不同类型的同一个对象。

因此问题:这是对的,我应该使用哪一个?

3 个答案:

答案 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

结论:

  1. getSource()会返回Object,但不能nullgetComponent()会返回Component,有时会返回event instanceof Component == false },它返回null

  2. 两者都需要输入您想要的类型。当然,预先instanceof检查总是好的。但是,getSource()可以让您的范围更广,而且投射可能需要更长时间,但不能null(根据我的理解)。

  3. 因此,使用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