2016-09-08 3 views
2

Quelle est la différence entre KeyEvent.getSource() et KeyEvent.getComponent() et lequel utiliser et quand? Je crée une interface utilisateur en utilisant KeyEvents. Je devais voir il y a les fonctions KeyEvent.getSource() KeyEvent.getComponent() et était curieux de savoir lequel utiliser quand. Les recherches dans l'API Java ont donné les résultats suivants: getSource() est hérité de EventObject avec la description suivante: "L'objet sur lequel l'événement s'est initialement produit." getComponent() est hérité de ComponentEvent "Renvoie l'expéditeur de l'événement."Différence entre KeyEvent.getSource() et KeyEvent.getComponent()

Maintenant, il me semble qu'ils retournent le même objet avec des types différents.

Par conséquent la question: Est-ce exact et lequel dois-je utiliser?

+1

Vous avez raison. En général, vous voulez écrire du code qui utilise le moins de casting possible; le code est plus robuste lorsque les types sont vérifiés au moment de la compilation plutôt qu'à l'exécution. – VGR

Répondre

0

De here:

getSource() est une méthode prévue dans la AWTEvent qui est la classe abstraite pour toutes les classes d'événements. Vous appelez la méthode getSource() lorsque vous voulez savoir ce qui a causé cette action. Cela serait utile lorsque vous avez un actionEvent qui peut être déclenché par un bouton, un champ de texte ou un élément de menu. Vous voudrez peut-être savoir quel élément a provoqué l'action au feu et que cet appel ne

De plus, la méthode getComponent() renverra l'objet Component qui a été pris par l'événement. Donc, dans le cas de voir ce qui a provoqué une action, il n'y a pas de réelle différence entre ce que vous utilisez pour obtenir l'objet avec lequel vous interagissez.

0

De l'Javadoc de l'autre:


getSource():

objet java.util.EventObject.getSource()

L'objet sur lequel le Event initialement survenu.

Retourne: L'objet sur lequel le Event s'est initialement produit.


getComponent()

Component java.awt.event.ComponentEvent.getComponent()

Renvoie à l'origine de l'événement.

Renvoie: l'objet Component à l'origine de l'événement ou null si l'objet n'est pas Component.


Conclusion:

  1. getSource() retourne un Object, qui ne peut être null, tandis que getComponent() retourne un Component, et parfois, si event instanceof Component == false, il retourne null.

  2. Les deux doivent être castés dans le type désiré. Bien sûr, un contrôle instanceof est toujours bon. Mais, getSource() vous permet une gamme plus large et la coulée peut prendre plus de temps, mais ne peut pas être null (à mon sens).

Donc, utilisez e.getSource() est toujours plus sûr.

0

dans ComponentEvent, une superclasse de KeyEvent:

public Component getComponent() { 
    return (source instanceof Component) ? (Component)source : null; 
} 

et en ObjetEvenement, le grand-parent de ComponentEvent (et KeyEvent):

protected transient Object source; 

public Object getSource() { 
    return source; 
} 

code source fourni avec JDK 1.8.0_121

comme on peut le voir à la fois retourner le même objet (source) tant qu'il s'agit d'un Component, sinon, getComponent renvoie null.