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 :

Comment modifer un JTable?


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Par défaut Comment modifer un JTable?
    Bonjour,

    J’ai un JTable défini à partir d’un AbstractTableModel, ce JTable est la représentation d’un tableau à deux dimensions (data). Comment je peux faire pour que mon JTable change automatiquement lorsque le data change ? j’ai essayé les méthodes fireTableDataChanged() et repaint(), mais ca na pas marché.

    Merci.

  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
    La question est, quel données changent? Celles dans le modèle, celles qui sont à l'endroit d'où provient les données du modèle???

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Par défaut
    Citation Envoyé par sinok Voir le message
    La question est, quel données changent? Celles dans le modèle, celles qui sont à l'endroit d'où provient les données du modèle???
    le probleme est que lorsque les donnees du model (de type Object[][]) changent, le JTable ne change pas.

    je vai vous montrer le code quand je rentre a la maison.

    desolé si c'est mal expliqué

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Par défaut
    Voici un exemple qui représente le problème : soit un tableau de deux colonnes, une première colonne qui contient des entiers et l’autre contient leurs doubles. Lorsque l’utilisateur change une valeur dans la première colonne, je veux que l’autre case change automatiquement pour afficher le double de la nouvelle valeur entrée.

    Voici le code du model :

    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
     class MyTableModel extends AbstractTableModel implements TableModelListener {
            private String[] columnNames = { "l'entier" , "son double" };
            private Object[][] data = { { 1 , 2 } , { 15 , 30 } , { 4 , 8 } };
     
            public int getColumnCount() {
                return columnNames.length;	}
     
            public int getRowCount() {
                return data.length;	}
     
            public String getColumnName(int col) {
                return columnNames[col];	}
     
            public Object getValueAt(int row, int col) {
                return data[row][col];	}
     
            public Class getColumnClass(int c) {
                return getValueAt(0, c).getClass();	}
     
            public boolean isCellEditable(int row, int col) {
            	return col == 0;	}
     
            public void setValueAt(Object value, int row, int col) {
            	data[row][col] = value;
    	        fireTableCellUpdated(row, col);	}
     
            public void tableChanged(TableModelEvent e) {
            	int row = e.getFirstRow();
    	        int column = e.getColumn();
    	        TableModel model = (TableModel)e.getSource();
    	        Object newValue = model.getValueAt(row, column);
     
    	        data[row][0] = newValue;
    	        data[row][1] = (Integer)newValue * 2;
    	        fireTableDataChanged();  
    	        repaint();  
            }
        }
    Voici la classe complete si vous voulez essaier une execution :

    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
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.TableModel;
    import java.awt.Dimension;
    import java.awt.GridLayout;
     
    public class TableDemo1 extends JPanel {
        JTable table;
        public TableDemo1() {
            super(new GridLayout(1,0));
     
            table = new JTable(new MyTableModel());
            table.setPreferredScrollableViewportSize(new Dimension(300, 70));
            table.setFillsViewportHeight(true);
            table.getModel().addTableModelListener(new MyTableModel());
     
            JScrollPane scrollPane = new JScrollPane(table);
            add(scrollPane);
        }
     
        class MyTableModel extends AbstractTableModel implements TableModelListener {
            private String[] columnNames = { "entier 1" , "entier 2" };
            private Object[][] data = { { 1 , 2 } , { 15 , 30 } , { 5 , 10 } };
     
            public int getColumnCount() {
                return columnNames.length;	}
     
            public int getRowCount() {
                return data.length;	}
     
            public String getColumnName(int col) {
                return columnNames[col];	}
     
            public Object getValueAt(int row, int col) {
                return data[row][col];	}
     
            public Class getColumnClass(int c) {
                return getValueAt(0, c).getClass();	}
     
            public boolean isCellEditable(int row, int col) {
            	return col == 0;	}
     
            public void setValueAt(Object value, int row, int col) {
            	data[row][col] = value;
    	        fireTableCellUpdated(row, col);	}
     
            public void tableChanged(TableModelEvent e) {
            	int row = e.getFirstRow();
    	        int column = e.getColumn();
    	        TableModel model = (TableModel)e.getSource();
    	        Object newValue = model.getValueAt(row, column);
     
    	        data[row][0] = newValue;
    	        data[row][1] = (Integer)newValue * 2;
    	        fireTableDataChanged();  
    	        repaint();  
            }
        }
     
        private static void createAndShowGUI() {
            JFrame frame = new JFrame("TableDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            TableDemo1 newContentPane = new TableDemo1();
     
            newContentPane.setOpaque(true); 
            frame.setContentPane(newContentPane);
     
            frame.pack();
            frame.setVisible(true);
        }
     
        public static void main(String[] args) {
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    C'est tout simple, il suffit d'utiliser la methode setValueAt() de ton modele

    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
     
        public void setValueAt(Object value, int row, int col) {
          data[row][col] = value;
          fireTableCellUpdated(row, col);
          data[row][col + 1] = (Integer) value * 2;
          fireTableCellUpdated(row, col);
        }
     
        public void tableChanged(TableModelEvent e) {
          // int row = e.getFirstRow();
          // int column = e.getColumn();
          // TableModel model = (TableModel) e.getSource();
          // Object newValue = model.getValueAt(row, column);
          //
          // data[row][0] = newValue;
          // data[row][1] = (Integer) newValue * 2;
          // fireTableDataChanged();
          repaint();
        }

Discussions similaires

  1. Comment imprimer une JTable
    Par L4BiN dans le forum Composants
    Réponses: 9
    Dernier message: 03/08/2006, 15h09
  2. Comment modifer le path
    Par yashiro dans le forum Linux
    Réponses: 4
    Dernier message: 31/03/2006, 07h03
  3. comment remplir un jTable à partir d'un fichier texte
    Par @yoyo dans le forum Composants
    Réponses: 1
    Dernier message: 16/03/2006, 11h54
  4. [Débutante] Comment fonctionne une JTable?
    Par delph1983 dans le forum Composants
    Réponses: 38
    Dernier message: 14/03/2006, 16h49
  5. Comment rafraichir une JTable
    Par critok dans le forum Composants
    Réponses: 3
    Dernier message: 06/12/2005, 13h48

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