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 :

Gestion d'évènement JList


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut Gestion d'évènement JList
    Bonjour,

    j'ai créé une classe servant à fabriquer une JList associée à des CheckBox. Tout ceci me donne donc une liste où l'on peut sélectionner les items en cochant les cases associées.
    Appelons cette classe: gestionChkList

    J'ai intégré ce "composant" dans mon application principale en implémentant la classe ci-dessus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gestionChkList checkListe = new gestionChkList();
    /.../
    Le problème maintenant consiste à détecter dans l'application principale, lorsque l'utilisateur clique sur les CheckBox de checkListe.

    Dans la classe du composant gestionChkList, j'ai bien un système qui détecte les évènements de la JList. Car gestionChkList implémente l'interface ListSelectionListener.
    Sauf que l'évènement est traité au sein de la classe du composant. Or un clic sur cette liste doit provoquer des changements dans l'application principale qui contient cet objet.

    J'ai bien entendu essayé dans l'application principale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    checkListe.addActionListener( this );
    mais un message d'ECLIPSE me signale que cela n'est pas correct.

    Avez-vous une idée du mécanisme à mettre en place pour que les évènements du composant soient remontés à l'application principale ?

    Merci

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Bonjour,

    Supposons que ta classe soit GestionChkList
    Le minimum pour ajouter la fonction que tu désir serai :
    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
    public class GestionChkList extends JList {
    	private String myStringValue = "Toto";
    	public GestionChkList() {
    		this.addListSelectionListener(new ListSelectionListener() {
     
    			@Override
    			public void valueChanged(ListSelectionEvent arg0) {
    				// TODO Auto-generated method stub
    				System.out.println("Oula,il y a un truc qui c'est passé ici !");
                                    System.out.println(myStringValue);
    				System.out.println(GestionChkList.this.myStringValue);
    			}
    		});
    	}
    }
    Tu peux aussi faire en sorte que ta classe implémente ListSelectionListener :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class GestionChkList extends JList implements  ListSelectionListener{
    	public GestionChkList() {
    		this.addListSelectionListener(this);
    	}
    	@Override
    	public void valueChanged(ListSelectionEvent arg0) {
    		// TODO Auto-generated method stub
    		System.out.println("Au travail !");
    	}
    	public static void main(String[] args) {
    		new GestionChkList();
    	}
    }
    Dans les deux cas, il me semble qu'il n'y ai pas de problème de compilation.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Utilise une JTable avec le modèle qui va bien, ce sera amplement plus facile.
    Le composant JList n'est pas prévu pour faire de l'édition.

  4. #4
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Merci pour vos réponses.

    Pour Kolodz: Le code que vous me proposez ne répond pas à mon problème.
    La gestion de l'évènement est traité sans souci au sein de gestionChkList. D'ailleurs, le code que j'utilise correspond grosso-modo à celui que vous me proposez.
    Le problème est d'avertir la classe contenant ce composant, qu'un évènement a eu lieu.

    Pour Sinok: je crois que je vais suivre votre conseil, car la construction du composant CheckList m'a demandé beaucoup de recherche sur Internet.

  5. #5
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Re-bonjour,

    juste pour ma culture personnelle:
    y a-t-il un moyen en JAVA, pour qu'un composant "maison" puisse envoyer un message vers son parent ?

  6. #6
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    C'est possible, mais qu'entendez-vous exactement par parent ?

    Pour ce qui est de prévenir la classe contenante :
    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
     
    class ClasseContenu{
         private ClasseContenant parent = null;
         ClasseContenu(ClasseContenant  contenant){
              this.parent=contenant;
         }
         void prevenirParent(){
              this.parent.handleEvent(this);
         }
    }
     
    class ClasseContenant {
         private List<ClasseContenu> enfants = null;
         void handleEvent(ClasseContenu declancheur){
         //TODO !
         }
    }
    Il y a d'autres moyens plus propre.
    En utilisant, l'interface EventListener, par exemple :
    http://download.oracle.com/javase/6/...tListener.html

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  7. #7
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonsoir,

    je suis en train de potasser sur l'exemple que vous m'avez fourni:
    il y a un soucis avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void prevenirParent()
    {
      this.parent.handleEvent(this);
    }
    D'abord, message d'ECLIPSE: The method handleEvent(Event) in the type Component is not applicable for the arguments ( ClasseContenue ). Pour info, ClasseContenue étends JPanel.

    Ensuite, la méthode HandleEvent semble dépréciée

    J'ai cherché sur Google des exemples utilisant HandleEvent ou DispatchEvent, je ne trouve rien de concret ou d'utilisable



    Je ne pense pas que je suis le seul au monde à créer un composant qui doit alerter la classe contenante, qu'un évènement vient de lui arriver

  8. #8
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    En fait je n'aurai pas dû appeler cette méthode avec ce nom là.
    (Déjà utiliser dans la classe JPanel)

    Pour le coup, vous pouvez largement crée votre méthode "handleEvent" (en utilisant un autre nom plus adapté). Cela ne fait que rajouter du comportement à votre composant.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  9. #9
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Ok, j'ai compris, il s'agit d'un malentendu sur le nom de la méthode

    Pour cette affaire, j'ai résolu le problème en déclarant un écouteur ListSelectionEvent dans la classe contenante, au lieu de le déclarer dans la classe même du composant.

    On va dire que le problème est résolu.

    Merci encore

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

Discussions similaires

  1. Gestion des évènements Netscape 7.0
    Par RATHQUEBER dans le forum Autres langages pour le Web
    Réponses: 6
    Dernier message: 19/12/2005, 16h26
  2. Problème avec la gestion des événements
    Par CynO dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 10h07
  3. [JTable] gestion des événements
    Par soulhouf dans le forum Composants
    Réponses: 4
    Dernier message: 19/08/2005, 13h21
  4. Gestion des évènements lors d'un clique sur une image.
    Par yoghisan dans le forum Débuter
    Réponses: 7
    Dernier message: 23/06/2005, 19h04
  5. Gestion d'événements hors tables
    Par Quentin dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 11/02/2005, 00h09

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