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 :

Binding colonne JTable


Sujet :

Composants Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 12
    Par défaut Binding colonne JTable
    Bonjour à tous,

    J'ai 2 combobox dans 2 colonnes différentes de ma JTable.
    Lorsque je modifie l'une de mes combobox, j'aimerais que l'autre se mette à jour en conséquence.
    Je cherche depuis des heures sans résultats.
    Quelqu'un aurait-il une idée ?

    Merci d'avance.

  2. #2
    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
    Il suffit pour cela que la valeur retournée dans le getValueAt du modèle de ta jtable pour la deuxième colonne se base sur la valeur de la première colonne. Et que dans le setValueAt du modèle tu penses bien à appeler la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fireTableRowsUpdated(indexLigne, indexLigne);

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 12
    Par défaut
    Je travaille avec des Objets.
    De ce fait, ma 1ère combobox contient des Familles et ma 2nde combobox contient des Articles.

    Comment faire pour binder ces 2 combobox tout en transportant ces Objets à travers la JTable ? (et non les Strings correspondant à ces Objets)

  4. #4
    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
    Tu prends ça du mauvais coté, ce n'est pas au niveau des combo boxes qu'il faut travailler mais au niveau des données contenues dans la JTable.

    Que contient ton modèle?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 12
    Par défaut
    Je remplis mon modèle de la manière suivante :

    Colonne 1 : type int (une année)
    Colonne 2 : type int (un mois)
    Colonne 3 : type Famille (une famille d'article)
    Colonne 4 : type Article (un article)

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 12
    Par défaut
    Sinok un petit coup de main s'il-te-plaît ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Août 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 12
    Par défaut
    Solution :

    On insère les objets Article et Famille dans la JTable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     modeleJTable.addRow(new Object[] {
                                objet.getId(),
                                objet.getDate(),
                                objet.getFamille(),
                                objet.getArticle()});
    On définit les Renderer et Editor de nos Article et Famille dans le modèle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    jtable.setDefaultRenderer(Famille.class, new FamilleCellRenderer());
    jtable.setDefaultEditor(Famille.class, new FamilleCellEditor(new JComboBox()));
    jtable.setDefaultRenderer(Article.class, new ArticleCellRenderer());
    jtable.setDefaultEditor(Article.class, new ArticleCellEditor(new JComboBox()));
    FamilleCellRenderer :
    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 FamilleCellRenderer extends DefaultTableCellRenderer
    {
     
    		@Override
    		public Component getTableCellRendererComponent(JTable table, Object value,
    				boolean isSelected, boolean hasFocus, int row, int column)
    		{
    			Famille famille = (Famille)value;
    			return super.getTableCellRendererComponent(table, famille.getLibelle(), isSelected, hasFocus, row, column);
    		}
     
    }
    FamilleCellEditor :

    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
     
    public class FamilleCellEditor extends DefaultCellEditor
    {
    	private JComboBox comboFamilles;
    	private List<Famille> listeFamilles;
     
    		public FamilleCellEditor(JComboBox comboFamilles)
    		{			
    			super(comboFamilles);
    			this.comboFamilles = comboFamilles;
    		}
     
    		@Override
    		public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
    		{
    		    comboFamilles.removeAllItems();
    		    listeFamilles = FamilleDAO.getListeFamilles();
     
    		    for (Famille authorizedValue : listeFamilles)
    		    {
    				comboFamilles.addItem(authorizedValue.getFamille());
    		    }
    		    Famille famille = (Famille)value;
     
    		    combo.setSelectedIndex(listeFamilles.indexOf(famille));
    		    return editor;
    		}
     
    		@Override
    		public Object getCellEditorValue()
    		{
    			return listeFamilles.get(comboFamille.getSelectedIndex());
    		}
     
    }
    Enfin, on override la méthode getValueAt(row, column) du modèle de la JTable pour compléter la combobox des articles en fonction de la famille sélectionnée :
    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
     
    		@Override
    		public Object getValueAt(int row, int column)
    		{
    			// Retourne vrai s'il s'agit d'une instance de famille
    			if (super.getValueAt(row, column) instanceof Famille)
    			{
    				// On récupère l'article de la ligne courante
    				Famille currentFamille = (Famille)super.getValueAt(row, column);
    				Article currentArticle = (Article)super.getValueAt(row, column+1);
    				// Si la l'article sélectionné n'appartient pas à la famille sélectionnée
    				if (currentArticle != null && currentFamille != null &&
    					currentArticle.getFamille().getIdf() != currentFamille.getIdf())
    				{
    					// On modifie la valeur de l'article
    					super.setValueAt(currentFamille.getListeArticle().get(0), row, column+1);
    				}
    			}
    			return super.getValueAt(row, column);
    		}

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/10/2006, 13h10
  2. ajout de colonne JTable
    Par matzeus dans le forum Composants
    Réponses: 22
    Dernier message: 16/05/2006, 15h04
  3. changement de valeur d'une colonne JTable
    Par matzeus dans le forum Composants
    Réponses: 1
    Dernier message: 04/05/2006, 19h05
  4. deplacement Colonnes JTable
    Par chasse dans le forum Composants
    Réponses: 1
    Dernier message: 26/04/2006, 15h53
  5. redimensionner toutes les colonnes JTable
    Par jdewalqu dans le forum Composants
    Réponses: 2
    Dernier message: 02/03/2006, 15h52

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