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] créer un dataModel pour charger la table


Sujet :

Composants Java

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 33
    Par défaut [JTable] créer un dataModel pour charger la table
    Bonjour,

    J'utilise un JTable dans une interface graphique. Cette JTable est alimentée par une base de données MYSQL qui retourne un objet Object[][] mesValeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Object[][] resultatsSelect;
    JTable table = new JTable(resultatsSelect, lesNomsCol);

    Seulement, je souhaite modifier ma table quand je fais une nouvelle requête (via interface graphique).
    Cette requête me retourne un nouvel objet. Mon problème est que je n'arrive pas à mettre ma table à jour avec cet objet ?

    J'ai trouvé ceci :

    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
    JTable tab = new JTable();
    ...
    TableModel dataModel;
    dataModel = new AbstractTableModel() {
    			public int getColumnCount() {
    				return 4;
    			}
    			public int getRowCount() {
    				return 10;
    			}
    			public Object getValueAt(int row, int col) {
    				return new Integer(row*col);
    			}
    	    };
    ...
    tab.setModel(dataModel);
    seulement je n'arrrive pas à créer ce dataModel , je ne comprend pas

    Merci d'avance de m'aider
    Cordialement.

  2. #2
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Une solution est de ne pas passer par une classe anonyme afin de pouvoir lui ajouter une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class MyTableModel extends AbstractTableModel {
     
    	...
     
    	public void setData(Object[][] data) {
    		this.data = data;
    		fireTableDataChanged();
    	}
     
    	...
    }

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 33
    Par défaut
    Merci ngpub, j'essaye ca

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 33
    Par défaut
    J'ai créé la classe comme tu me l'as indiqué mais lorsque j'utilise setData(mesResultatsDuSelect) depuis ma classe d'interface graphique, rien ne se passe. je procède comme cela :

    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
    import javax.swing.*;
    import java.awt.event.*;
     
    public class interface extends JFrame implements ActionListener {
    ...
    Jtable laTable = new Jtable();
    ...
    recupererResDeSelect() {
    <recupération des données>
     
    MyTableModel TM = new MyTableModel();
    TM.setData(resultatsSelect);
    }
     
    }
    rien ne se passe, la table n'est pas affichée avec les valeurs...

  5. #5
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Pardon je me suis trompé d'événement, cela devrait mieux marcher avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fireTableStructureChanged()

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 33
    Par défaut
    Désolé mais cela ne fonctionne toujours pas. Je n'ai pas d'affichage de ma table. (l'exécution se passe bien pourtant )

  7. #7
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Si ça peut aider voici un exemple qui fonctionne :
    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
     
    import javax.swing.table.AbstractTableModel;
     
    public class MyTableModel extends AbstractTableModel {
     
    	private Object[][] data = null;
     
    	public MyTableModel(Object[][] data) {
    		setData(data);
    	}
     
     
    	public int getColumnCount() {
    		return data != null && data.length > 0 ? data[0].length : 0;
    	}
     
    	public int getRowCount() {
    		return data != null ? data.length : 0;
    	}
     
    	public Object getValueAt(int rowIndex, int columnIndex) {
    		return data != null ? data[rowIndex][columnIndex] : null;
    	}
     
    	public void setData(Object[][] data) {
    		this.data = data;
    		fireTableStructureChanged();
    	}
    }
    Testé avec :
    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
     
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JTable;
     
    public class TestTableModel {
     
    	private static final String[][] DATA_A = new String[][] {
    			new String[]{"un"},
    			new String[]{"deux"},
    			new String[]{"trois"}
    	};
     
    	private static final String[][] DATA_B = new String[][] {
    			new String[]{"X", "59"},
    			new String[]{"U", "45"}
    	};
     
    	private static final String[][] DATA_C = new String[][] {
    			new String[]{"mod", "Y", "000"}
    	};
     
     
    	public static void main(String[] args) {
     
    		final JTable table = new JTable(new MyTableModel(DATA_A));
     
    		JMenuBar menuBar = new JMenuBar();
    		JMenu menu = menuBar.add(new JMenu("Données"));
    		menu.add(new JMenuItem("A")).addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
    				((MyTableModel)table.getModel()).setData(DATA_A);
    			}
    		});
    		menu.add(new JMenuItem("B")).addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
    				((MyTableModel)table.getModel()).setData(DATA_B);
    			}
    		});
    		menu.add(new JMenuItem("C")).addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
    				((MyTableModel)table.getModel()).setData(DATA_C);
    			}
    		});
    		menu.add(new JMenuItem("Vide")).addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
    				((MyTableModel)table.getModel()).setData(null);
    			}
    		});
     
     
    		JFrame frame = new JFrame("TestTableModel");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		frame.setJMenuBar(menuBar);
    		frame.getContentPane().add(table, BorderLayout.CENTER);
     
    		frame.setSize(320, 240);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
    	}
    }

  8. #8
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 33
    Par défaut
    Merci je test ca dès demain.

  9. #9
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 33
    Par défaut
    Je viens de tester ton code, il marche nikel.

    J'ai remplacer les noms de variables et autres dans mon appli mais j'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Exception in thread "main" java.lang.NullPointerException
    	at anomalies_interface.effectuerSelection(anomalies_interface.java:271)
    	at anomalies_interface.<init>(anomalies_interface.java:50)
    	at anomalies_interface.main(anomalies_interface.java:280)
    Pourtant je fais exactement la même chose que toi...

    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
    ...
    table = new JTable(new MyTableModel(resultatsSelect));
    ...
    anomalies lesAnomalies = new anomalies();
     
    		switch (valeurCombo) {
    		case 0: resultatsSelect = lesAnomalies.selectionToutesLesAnomalies();
    		break;
    		case 1: resultatsSelect = lesAnomalies.selectionAnomaliesMaterielNonRecu();
    		break;
    		case 2: resultatsSelect = lesAnomalies.selectionAnomaliesMaterielRecu();
    		break;
    		case 3: resultatsSelect = lesAnomalies.selectionnerAnomalie(lInfo);
    		break;
    		case 4: resultatsSelect = lesAnomalies.selectionMaterielDeffectueux(lInfo);
    		break;
    		}
     
    		((MyTableModel)table.getModel()).setData(resultatsSelect);
    et resultatsSelect est bien de type Object[][] ...
    Le fait que je ne soit ni "private" ni "static" ni "final" est peut être génant ?

  10. #10
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    L'erreur indique une valeur nulle à ligne 271 du fichier anomalies_interface.java,
    A quoi ressemble cette ligne ?

  11. #11
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 33
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((MyTableModel)table.getModel()).setData(resultatsSelect);
    c'est là que le programme plante comme on peut le voir

    PS: ton programme n'accepte apparemment pas les attributs non static, mon erreur vient peut être de cela ?

  12. #12
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Normalement "table.getModel()" ne peut pas retourner nul donc je pense que c'est "table" qui est nul, es-tu sûr de sa valeur ?

    PS: ton programme n'accepte apparemment pas les attributs non static, mon erreur vient peut être de cela ?
    La notion static joue sur l'accessibilité d'une valeur, là c'est un problème de contenu.

  13. #13
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 33
    Par défaut résolu et merci
    D'accord, je comprend, je n'avais pas encore initialisé ma table, doù le "null"

    J'avais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    effectuerSelection(0);
    init();
    j'ai remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    init();
    effectuerSelection(0);
    Et ca mache. enfin tout marche le rechargement de ma table et tout !

    Merci mille fois d'avoir été aussi patient

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/06/2009, 14h49
  2. Réponses: 3
    Dernier message: 16/04/2009, 12h00
  3. Créer un bouton pour gérer la source des tables liées
    Par Fredo67 dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/02/2008, 10h31
  4. Créer une partition pour une table
    Par Erakis dans le forum SQL Procédural
    Réponses: 22
    Dernier message: 28/02/2005, 18h39

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