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 de listeners pr communiquer entre un Jlist et jtable


Sujet :

Composants Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Gestion de listeners pr communiquer entre un Jlist et jtable
    Bonjour à tous,

    j'ai une classe qui affiche une interface comprenant une jlist et une jtable.
    les 2 composants sont complétés avec des données que je lis dans des fichiers XML (style BDD)

    en gros ma liste affiche la liste des classes d'une école
    et quand je clique sur l'un des items je veux voir les nom et prénoms des élèves de la classe sélectionnée.

    pour les deux composants j'utilise des modeles.

    ma question c'est comment faire pour récupérer l'index de la ligne sélectionnée, le balancer à mon modele de table et mettre à jour ma table?

    voila des petits bout de codes (avec des données en durs pour le moment dans le modele de table)

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    public class IHMEleve extends JFrame implements ListSelectionListener{
       (...)
       ListeClasseModel listeClasses=new ListeClasseModel(liaison);	
       jlisteClasses = new JList (listeClasses);	
       (...)
       EleveTableModel eleveTableModel= new EleveTableModel(liaison);
       JTable tableauEleve= new JTable(eleveTableModel);
       tableauEleve.createDefaultColumnsFromModel();
       (...)
       public void valueChanged(ListSelectionEvent e) {
    		if (e.getValueIsAdjusting()) {
    			int indexSelection=e.getFirstIndex(); 
    			System.out.println(indexSelection);
    		}
        }
       (...)
    }
     
    public class EleveTableModel extends AbstractTableModel{
     
    	ClasseEleve liaison;
    	private Vector nomColonnes;
    	private Eleve e= new Eleve();
     
    	//constructeur
    	public EleveTableModel(ClasseEleve l){	
    		liaison=l;
    		nomColonnes=new Vector();
    		nomColonnes.add("nom");
    		nomColonnes.add("prenom");
    	}	
     
    	// retourne le nombre de colonne s
    	public int getColumnCount() {
    		return nomColonnes.size();
    	}
     
    	// retourne le nombre de lignes 
    	public int getRowCount() {	
    		Classe c= liaison.treeClasse.get(1); // données en dur!!!
    		return liaison.maMap.get(c).size();		
    	}
     
    	// retourne le nom de la colonne d'indice indexColonne
    	public String getColumnName(int indexColonne) {
    		String nomCol="";
            if (indexColonne<=getColumnCount())
            	nomCol=(String)nomColonnes.elementAt(indexColonne);
            return nomCol;
        }
     
    	//retourne l'objet de la cellule(indexLigne, indexColonne)
    	public Object getValueAt(int indexLigne, int indexColonne) {		
    		Object retour= new Object();
    		// si on a cliqué sur une classe
    		Classe c=liaison.treeClasse.get(1); // données en dur!!!
    		if (liaison.maMap.get(c)!=null){
    			e= liaison.maMap.get(c).get(indexLigne);
    			switch (indexColonne){
    			case 0: 
    				retour=  e.getNom();
    				break;
    			case 1: 
    				retour=  e.getPrenom();
    				break;
    			default: retour= null;
    				break;
    			}
    		}
    		else{
    			retour= "";
    		}
    		return retour;
    	}
     
    }

    merci pour votre aide!!!!

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Surement quelquechose ressemblant à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int index = listeClasse.getSelectedIndex()

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    mon soucis c'est de savoir si c'est pas mieux de passer par des listeners?

  4. #4
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour,

    [EDIT] texte inutile [/EDIT]

    Je te propose de réorganiser ton code en :
    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
    public class EleveTableModel extends AbstractTableModel implements ListSelectionListener {
     
      private Classe classeAAfficher;
     
      // Méthode pour ListSelectionListener
      public void valueChanged(ListSelectionEvent e) {
        JList list = (JList) e.getSource();
        classeAAfficher = (Classe) list.getSelectedValue();
        super.fireTableDataChanged();
      }
     
      // Affichage
      public Object getValueAt(int row, int col) {
        ...
        // la j'ai pas bien compris ton code, à toi d'adapter
      }
    }
    Il te faut l'adapter, parce que je n'ai pas bien compris la différence entre ClasseEleve et Classe.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Que veux tu dire par là, de toute façon tu devras effectivement utiliser un listener pour guetter les action sur ta JList et lorqu'une action est effectuée (ou qu'une valeur est changée) tu récupère l'index comme je l'ai indiqué au dessus, puis tu charge le modèle de ta JTable à ta convenance

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    je vous remercie pour votre aide, mais les listeners c'est pas quelque chose de clair pour moi.
    Est ce que vous pourriez me dire quels sont les listeners à mettre dans quelles classes? et comment me dépatouiller avec cet index à passer en paramètre à mon model de table?

    (je sais que le code est pas très compréhensible comme ça, mais il y en a tellement....dur dur de synthétiser!)

  7. #7
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    En fait, pour faire ce que tu veux, il faut deux choses :
    - que le TableModel tienne compte de l'élément sélectionné dans la liste (ce que tu as déjà fait, il me semble). Ca peut se faire en lui donnant l'index (avec getSelectedIndex()) ou directement l'objet (avec getSelectedValue())
    - que l'objet qui écoute la liste prévienne le TableModel lorsque la sélection est modifiée. Il peut faire ça en appelant fireTableDataChanged();

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/05/2006, 22h22
  2. Réponses: 3
    Dernier message: 27/04/2006, 12h24
  3. [Débutant] Listener pour une entrée dans le presse papier.
    Par Silvio02 dans le forum Général Java
    Réponses: 6
    Dernier message: 08/01/2006, 22h44
  4. gestion de 3 comboBox liés entre elles
    Par michaelbob dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/11/2005, 08h58
  5. Communiquer entre plusieurs instances d'applications
    Par bourinator dans le forum C++Builder
    Réponses: 5
    Dernier message: 28/09/2003, 11h24

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