IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

[JTable] [FocusListener] Savoir le composant qui appelle


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 5
    Par défaut [JTable] [FocusListener] Savoir le composant qui appelle
    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.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Utilises la méthode getComponent() de ton event...

    a++

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    soit e l'evenement, e.getSource() doit donner la source.
    cf API

    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.)

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 5
    Par défaut
    D'accord

    Si je veux appeler la fonction clearSelection de la JTable
    je dois faire quoi
    j'ai du mal avec l'introspection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Object o = e.getComponent();
    .....
    clearSelection();
    Merci.

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Component component = e.getComponent();
     
    if (component instanceof JTable) {
    	JTable table = (JTable) component;
    	table.clearSelection();
    }
    a++

    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...

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 5
    Par défaut
    Excellent ...

    fallait penser à caster

    Merci.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    Citation Envoyé par adiGuba
    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...
    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.

    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

  8. #8
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Est ce qu'un ComponentEvent peut etre lancé mais pas par un Component?
    Non dans le cadre de l'API de Sun.
    Mais rien de t'empêche de faire (exemple tordu) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
       }
     }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Lazarus] TActionList : comment connaître le composant qui a appelé l'action
    Par Jon Shannow dans le forum Lazarus
    Réponses: 8
    Dernier message: 12/01/2013, 21h45
  2. Savoir "qui" appelle une méthode ?
    Par JohnNC dans le forum Langage
    Réponses: 4
    Dernier message: 22/03/2007, 16h22
  3. [PL/SQL] Trigger qui appelle une procédure
    Par alex6891 dans le forum Oracle
    Réponses: 5
    Dernier message: 19/01/2006, 09h01
  4. [JList] Composant qui ne se met pas a jour
    Par ouedmouss dans le forum Composants
    Réponses: 6
    Dernier message: 31/08/2005, 17h07
  5. Procedures stockées qui appellent un autre ?
    Par Tchinkatchuk dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 09/05/2005, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo