Bonjour,
j'ai deux JTable qui ont le même FocusListener et je voudrais savoir si il est possible de savoir quelle JTable a envoyé l'événement sachant que les deux JTable sont identiques.
Merci.
Version imprimable
Bonjour,
j'ai deux JTable qui ont le même FocusListener et je voudrais savoir si il est possible de savoir quelle JTable a envoyé l'événement sachant que les deux JTable sont identiques.
Merci.
Salut,
Utilises la méthode getComponent() de ton event...
a++
soit e l'evenement, e.getSource() doit donner la source.
cf API :D
EDIT : La methode d'adiGuba est plus specifique et mieux appropriée à ton probleme.
Question suplementaire : Est-il possible que les componentEvent ne soient pas produites par des composants? Ce que je veux dire c'est : Est ce que getSource() et getComponent() renvoient le meme objet?
(En ne considerant pas le type specifié pour le retour, mais l'objet en lui-meme.)
D'accord
Si je veux appeler la fonction clearSelection de la JTable
je dois faire quoi :roll:
j'ai du mal avec l'introspection :?
Merci.Code:
1
2
3 Object o = e.getComponent(); ..... clearSelection();
C'est simple... Le JComponent qui t'es renvoyé par la méthode getComponent() est le composant qui a généré l'évenement. Donc si tu veux pouvoir appeller la méthode clearSelection() de ta JTable, tu dois caster cette valeur de retour en JTable...
Et pour éviter d'avoir des ClassCastException si ton Listener est utilisé sur autre chose que des JTable, il faut vérifier le type exact avec instanceof :
a++Code:
1
2
3
4
5
6 Component component = e.getComponent(); if (component instanceof JTable) { JTable table = (JTable) component; table.clearSelection(); }
PS : La solution de TabrisLeFol marche aussi car getComponent() et getSource() retourne le même objet, mais getComponent() ne le retourne que s'il est du type Component...
Excellent ...
fallait penser à caster :?
Merci.
Ok, merci de confirmer. Mais c'est vrai qu'en utilisant getComponent tu ne prends pas le risque d'exception lancée lors du "cast" (meme si a priori dans ce cas la, cela ne se produirait pas) et donc code est plus "beau". De toute maniere autant utiliser les methodes les plus specifiques.Citation:
Envoyé par adiGuba
Euh apres re-re-lecture, je ne suis pas sur que ton post confirme mon hypothese. En gros ma question est : Est ce qu'un ComponentEvent peut etre lancé mais pas par un Component? Je dirais non dans le cadre de l'API de sun. Mais est ce que theoriquement on pourrait le faire? En gros est ce possible que le getComponent retourn null sur un ComponentEvent obtenu grace à un Listener?
EDIT : la balise Resolu dans le titre est obtenue en appuyant sur :resolu: :roll:
Non dans le cadre de l'API de Sun.Citation:
Est ce qu'un ComponentEvent peut etre lancé mais pas par un Component?
Mais rien de t'empêche de faire (exemple tordu) :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 class ComponentEventGenerator extends Component { ArrayList listeners; public void addComponentListener(ComponentListener l) { ... } public void fireComponentEvent() { ComponentEvent ev = new ComponentEvent(this, 0); ev.setSource("component"); Iterator it = listeners.iterator(); while (it.hasNext()) { ((ComponentListener) it.next()).componentShown(ev); } } }