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 :

Lien entre une JTable et une List


Sujet :

Composants Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 6
    Par défaut Lien entre une JTable et une List
    Bonjour,

    J'affiche dans une Jtable une List d'objets possédant plusieurs attributs. Je fais avec un modèle Comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DefaultTableModel mo = (DefaultTableModel) this.table1.getModel();
    		for (Iterator iter = listIndividuTel.iterator(); iter.hasNext();) {
    			IndividuTel eachIndividuTel = (IndividuTel) iter.next();		
    			mo.addRow(new Object[]{eachIndividuTel.toString(), this.getTelType(eachIndividuTel)});
    		}
    Je peux changer l'ordre de tri en cliquant sur une colonne et déplacer les colonnes.

    Comment récupérer l'instance de l'objet se trouvant dans la liste listIndividuTel correspondant à la ligne cliquée dans la JTable ?

    merci infiniment de votre aide

  2. #2
    Membre éclairé Avatar de DjGonk
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    Salut,

    Tout d'abord il faut déjà que dans ta JList tu ajoutes bien des IndividuTel sur laquelle tu vas appliquer renderer spécifique pour la JList de sorte à n'avoir qu'afficher le nom de ton "IndividuTel".

    Ensuite il faut pour ta JTable créer un TableModel et Renderer spécifique. Pour le model voici un exemple :

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    import java.util.ArrayList;
    import java.util.List;
     
     
    import javax.swing.JTable;
    import javax.swing.table.AbstractTableModel;
     
    public class TableIndividuModel extends AbstractTableModel {
     
        private static final long serialVersionUID = -1173210832138799823L;
        private ArrayList<String> colonnes         = new ArrayList<String>(3);
        private List<IndividuTel>     list             = new ArrayList<IndividuTel>();
     
        /**
         * Constructeur.
         * 
         */
        public TableIndividuModel (List<IndividuTel> data) {
            this.colonnes.add(0,"N°");
            // Voir ce que tu as comme colonnes
            this.list= data;
        }
     
        @Override
        public Class<?> getColumnClass(int column) {
            if (column == 0) {
                return list.get(column).getXXX().class;
            } else if (column == 1) {
                return list.get(column).getXXX().class;
            } else if (column == 2) {
                return list.get(column).getYYY().class;
            } else if (column == 3) {
                return list.get(column).getXXX().class;
            }
            return "";
        }
     
        public int getColumnCount() {
            return X;
        }
     
        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return false;
        }
     
        public int getRowCount() {
            if (this.list != null)
                return this.list.size();
            return 0;
        }
     
        public String getValueAt(int rowIndex, int columnIndex) {
            if (this.list != null && this.list.size() > 0) {
                if (columnIndex == 0) {
                    return this.list.get(rowIndex).getXXX();
                } else if (columnIndex == 1) {
                    return this.list.get(rowIndex).getXXX();
                } else if (columnIndex == 2) {
                    return this.list.get(rowIndex).getXXX();
                } else if (columnIndex == 3) {
                    return this.list.get(rowIndex).getXXX();
                }
            }
            return null;
        }
     
        public IndividuTel getIndividuTelAtRow(int row) {
            if (this.list != null && this.list.size() > 0) {
                return this.list.get(row);
            }
            return null;
        }
     
        /**
         * Méthode qui retourne les objets {@link IndividuTel } associées aux lignes séléctionnées.
         */
        public List<IndividuTel > getIndividuTelsAtRow(int[] rows) {
     
            if (this.list != null && this.list.size() > 0) {
                List<IndividuTel > listeI = new ArrayList<IndividuTel >();
                for (int idRow = 0, n = rows.length; idRow < n; idRow++) {
                    listeI.add(getIndividuTelAtRow(rows[idRow]));
                }
     
                return listeI;
            }
            return null;
        }
    }
    Pour le renderer (dans l'exemple les champs ne sont que des String à toi de Catser proprement les objets) :

    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
     
    public class TableIndividuCellRenderer extends JLabel implements TableCellRenderer {
     
        private static final long serialVersionUID   = 5197147479491609635L;
        private static Color      backgroundSelected = new Color(255, 255, 0);
     
        /**
         * Constructeur.
         */
        public TableIndividuCellRenderer () {
            super();
            this.setFont(Constante.MONOSPACE);
            this.setHorizontalAlignment(SwingConstants.CENTER);
        }
     
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
                int row, int column) {
     
            if (isSelected) {
                this.setOpaque(true);
                this.setBackground(backgroundSelected);
            } else {
                this.setOpaque(false);
            }
     
            if (value != null) {
                /*
                 * if(column == 0) { this.setText(arg0) } else {
                 */
                this.setText(value.toString());
                // }
            } else
                this.setText("");
     
            return this;
        }
     
    }
    Ensuite tu appliques ça à ta JTable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    TableIndividuModel  model = new TableIndividuModel();
    ....
    jTable = new JTable(model);
     
    for (int i = 0, n = jTable.getColumnModel().getColumnCount(); i < n; i++) {
                    jTable.getColumnModel().getColumn(i).setCellRenderer(new TableIndividuCellRenderer());
                }
    Enfin lorsque tu sélectionnes dans ta JTable pour recuperer l'objet selectionné tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Recupere la mission selectionnée
    IndividuTel id = ((TableIndividuModel)getJTable().getModel()).getIndividuAtRow(getJTable()
                                        .getSelectedRows()[0]);
    Il faudra peut être que tu écoutes les évènements de sélection dans la JTable pour déclencher le retour de l'objet souhaité.

  3. #3
    Membre confirmé
    Profil pro
    Administrateur système
    Inscrit en
    Mai 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur système

    Informations forums :
    Inscription : Mai 2002
    Messages : 144
    Par défaut
    Je reprends ce topic. J'avais le même problème et ce message m'a bien aidé à ceci près que je ne récupère pas le bon objet quand on lance un tri des lignes de la tables.
    Une idée ?

  4. #4
    Membre éclairé Avatar de DjGonk
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    Normalement en utilisant le trie puis le rowconverter de JTable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //Pour le trie automatique
    jTable.setAutoCreateRowSorter(true);
     
    ...
     
    //Puis lors d'une selection
    int rowIndexModel = jTable.convertRowIndexToModel(jTable.getSelectedRows()[0]);
     
    XXX o = ((TableXXXModel)getJTable().getModel()).getXXXAtRow(rowIndexModel );
    cela suffit a récupérer l'objet correspondant.

Discussions similaires

  1. Inserer une Jtable dans une Jtable
    Par sylv179 dans le forum Composants
    Réponses: 2
    Dernier message: 22/12/2009, 13h30
  2. lien entre la couleur d'une case et une valeur
    Par surftoon dans le forum Excel
    Réponses: 2
    Dernier message: 21/05/2007, 17h26
  3. [JTable] Colorier une cellule d'une JTable
    Par Houssem dans le forum Composants
    Réponses: 1
    Dernier message: 15/05/2007, 15h54
  4. Réponses: 1
    Dernier message: 19/02/2007, 17h58
  5. Réponses: 4
    Dernier message: 09/02/2005, 11h44

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