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 :

JTable repaint validate


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut JTable repaint validate
    Bonjour,
    J'ai un souci de rafraichissement de la JTable après l'insertion. d'une ligne.
    La table est placée dans une JScrollPane, qui est placée dans une JPanel et qui à son tour est mise dans une JFrame.

    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
     
    public class Table extends JPanel implements Observer
    ....
    cols = data_model.getHeaders();
    Vector rows = data_model.getRows();
    table_model = new DefaultTableModel(rows, cols);
    jTable =  new JTable(table_model);
    // CA SE PASS BIEN JUSQU'ICI
    ...
    public void update(Observable ov, Object arg) {
     this.new_data = (Vector) arg;
               jTable.addRow(new_data);
               jTable.repaint();
               jTable.validate();
            }
        }
    Au démarrage, l'appli va chercher les les données via l'objet qui gère la transaction avec la base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public class BaseDonnees extends Observable
    En cliquant sur le menu, j'ouvre une fenêtre permettant d'insérer une nouvelle ligne dans la jtable et également dans la base toujours en passant par l'objet qui gère la transaction à la base.

    Quand des nouvelles données sont insérées, elles sont bien récupérées dans la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public void update(Observable ov, Object arg)
    Mais le probleme c'est que la jtable ne bouge pas.

    J'ai aussi essayé dans la méthode "update"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    table_model.addRow(new_data);
    //j'ai aussi essayé table_model.insertRow(unIndex,new_data);
    jTable.setModel(table_model);
    mais ça marche toujours pas.

    En débuguant, je vois que "table_model" contient bien les nouvelles données mais elles n'apparaissement pas dans la jtable.

    Avez vous une idée?

    Merci d'avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Utilise les méthodes fireTableXXX de ton model.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut
    J'ai déjà fait ça mais ça ne marche pas non plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void update(Observable ov, Object arg) {
            this.new_data = (Vector) arg;
                 table_model.insertRow(0, new_data);
                 jTableClient.getModel().addTableModelListener(new TableModelListener() {
                    @Override
                    public void tableChanged(TableModelEvent e) {
                        table_model.fireTableRowsInserted(e.getFirstRow(), e.getLastRow());
                    }
                });
        }

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void update(Observable ov, Object arg) {
            this.new_data = (Vector) arg;
            table_model.insertRow(0, new_data);
            table_model.fireTableRowsInserted(0, 0);       
        }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut
    Il se passe rien.

    Ca fait des jours que ça me prend la tête.
    (Sal***rie de JTable)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut
    Guys, une idée?

  7. #7
    Membre expérimenté Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Par défaut
    Citation Envoyé par grospatapouf Voir le message
    Ca fait des jours que ça me prend la tête.
    Pour trouver l'erreur rapidement, on part généralement d'un court exemple indépendant et compilable:
    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
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.table.*;
    public class BaseDonnees extends Observable implements ActionListener {
        private JButton btAdd;
        private final JFrame f;
        private final Table table;
        private int count = 100;
        public BaseDonnees() {
            f = new JFrame("BaseDonnees");
            initComponents();
            table = new Table();
            f.add(table);
            addObserver(table);
            f.setVisible(true);
        }
        private void initComponents() {
            btAdd = new javax.swing.JButton("Add");
            f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            btAdd.addActionListener(this);
            f.getContentPane().add(btAdd, BorderLayout.PAGE_START);
            f.setSize(400, 300);
            f.setLocationRelativeTo(null);
        }
        public void actionPerformed(final ActionEvent e) {
            Vector rowData = new Vector();
            rowData.add("A" + count);
            rowData.add("B" + count);
            count++;
            setChanged();
            notifyObservers(rowData);
     
        }
        public static void main(final String[] args) {
            Runnable gui = new Runnable() {
                public void run() {
                    new BaseDonnees();
                }
            };
            //GUI must start on EventDispatchThread:
            SwingUtilities.invokeLater(gui);
        }
    }
    class Table extends JPanel implements Observer {
        private final DefaultTableModel table_model;
        private final JTable jTable;
        private final DataModel data_model = new DataModel();
        private Vector cols;
        public Table() {
            cols = data_model.getHeaders();
            Vector rows = data_model.getRows();
            table_model = new DefaultTableModel(rows, cols);
            jTable = new JTable(table_model);
            setLayout(new BorderLayout());
            add(new JScrollPane(jTable));
        }
        public void update(Observable ov, Object arg) {
            Vector new_data = (Vector) arg;
            // remarque que addRow contient déjà un fireTableRowsInserted:
            table_model.addRow(new_data);
        }
    }
    class DataModel {
        private Vector headers;
        private Vector rows;
        public DataModel() {
            headers = new Vector();
            headers.add("Title 1");
            headers.add("Title 2");
            rows = new Vector();
            Vector rowData = new Vector();
            for (int i = 0; i < 4; i++) {
                rowData.add("A" + i);
                rowData.add("B" + i);
                rows.add(rowData);
            }
        }
        public Vector getRows() {
            return rows;
        }
        public Vector getHeaders() {
            return headers;
        }
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut
    Merci beaucoup de ta reponse uhrand.
    J'ai complètement refait cette partie et ça a marché. En fait, le code qui alimente la table au démarrage et celui qui insère de nouvelles données n'a pas changé. Est-ce que ça venait de l'agancement des composant? Un composant mal placé?? Un Conflit entre eux?? (En effet, au démarrage, j'affiche plusieurs tables placées dans les JTabbedPane.) Je n'en sais rien. En tout cas ton example est court et percutant. Je le conseille vivement à ceux qui se lancent dans JTbale.

    Merci à vous tous.

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

Discussions similaires

  1. JTable JTextArea Validation acte 2
    Par Patrice Henrio dans le forum Composants
    Réponses: 4
    Dernier message: 05/03/2014, 11h18
  2. JTable TexteArea Validation
    Par Patrice Henrio dans le forum Composants
    Réponses: 1
    Dernier message: 04/03/2014, 00h13
  3. [JTable] repaint dans un rowHeaderView
    Par biozaxx dans le forum Composants
    Réponses: 3
    Dernier message: 31/10/2007, 17h41
  4. [JTable] Valider une saisie
    Par dam21 dans le forum Composants
    Réponses: 3
    Dernier message: 25/03/2005, 16h29
  5. [JTable] Validation de saisie
    Par kekesilo dans le forum Composants
    Réponses: 10
    Dernier message: 18/10/2004, 13h21

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