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 :

Rafraîchir une JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Par défaut Rafraîchir une JTable
    Bonjours,

    Voila je souhaiterai pouvoir rafraichir une JTable lors de la suppression d'une ligne de celle-ci. Après maints essais infructueux, j'en suis arrivé à cette solution mais je doute qu'elle soit correcte :

    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 supprimerProduit()
    	{
    		// recupere la ligne selectionnee du JTable
    		int ligne = pp.getJt_afficherDonnee().getSelectedRow();
     
     
    		Produit p = new Produit((String)pp.getJt_afficherDonnee().getValueAt(ligne, 0),(String)pp.getJt_afficherDonnee().getValueAt(ligne, 1),(Integer)pp.getJt_afficherDonnee().getValueAt(ligne, 2),(Double)pp.getJt_afficherDonnee().getValueAt(ligne, 3));
     
    		pp.getGestionnaire().supprimerProduit(p);
    		pp.setVisible(false);
    		PresentationProduit ppp = new PresentationProduit(pp.getGestionnaire());
                    pp.setDefaultCloseOperation(0);
    		/*pp.getJt_afficherDonnee().repaint();
    		pp.getJt_afficherDonnee().updateUI();
    		DefaultTableModel model = (DefaultTableModel)pp.getJt_afficherDonnee().getModel();
    		model.fireTableDataChanged();
    		pp.getJt_afficherDonnee().setModel(model);*/
    	}

  2. #2
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    voyez si ce post répond à votre question: http://www.developpez.net/forums/d11...atique-jtable/

  3. #3
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Par défaut
    j ai essayer avec la methode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DefaultTableModel model = (DefaultTableModel)pp.getJt_afficherDonnee().getModel();
    		model.fireTableRowsUpdated(0, pp.getGestionnaire().getListeProduit().size()-1);
    		pp.getJt_afficherDonnee().setModel(model);
    mais la première ligne me dit qu il y a une exception de casting.
    J'avoue que ce rafraichissement me pertube

  4. #4
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    cela semble compliqué votre système.
    Quelle est la définition de pp ?
    Voici un exemple d'architecture avec une JTable:
    La classe principale du projet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class cCompta extends JFrame
    {
      private CTableDonnees m_tableDonnees; // Classe gérant les données de la JTable
      private JTable jTableur;
      /.../
     
      // CONSTRUCTEUR:
      public cCompta()
      {
        m_tableDonnees = new CTableDonnees();
        jTableur = new JTable( m_tableDonnees );
        /.../
      }
    }
    La classe gérant les données de la JTable:
    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
    public class CTableDonnees extends AbstractTableModel
    {
      /.../
      @Override
      public int getColumnCount() { /.../ }
     
      @Override
      public int getRowCount() { /.../ }
     
      @Override
      public int isCellEditable() { /.../ }
     
      @Override
      public Object getValueAt( int ligne, int colonne ) { /.../ }
     
      @Override
      public Object setValueAt( int ligne, int colonne )
      {
         /.../
         fireTableRowsUpdated( ligne, ligne ); // Indique une modification de données
         /.../
      }
     
      public int ajouteOperation( /.../ )
     { /.../
       fireTableRowsInserted( ligne_debut, ligne_fin ); // Indique un ajout d'enregistrement
     }
     
     
      public int supprimeOperation( /.../ )
     {  /.../
        fireTableRowsDeleted( ligne_debut, ligne_fin ); // Indique une suppression d'enregistrement
     }
    }

  5. #5
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Par défaut
    alors la définition de pp est celle-ci :

    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
     
    package view;
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.GridLayout;
     
    import javax.swing.GroupLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
     
    import javax.swing.border.EtchedBorder;
    import javax.swing.border.TitledBorder;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.DefaultTableModel;
     
    import controller.PresentationProduitController;
     
    import model.Gestionnaire;
    import model.Produit;
     
    public class PresentationProduit extends JFrame
    {
    	private Gestionnaire listeProduit;
     
    	private  String[] nomColonneJTable= {"nom produit","code produit","quantité","prix unitaire","prix total"};
     
    	private JScrollPane jsp_defilement;
     
    	private JTable jt_afficherDonnee;
     
    	private JButton jb_modifier;
    	private JButton jb_supprimer;
    	private JButton jb_ajouter;
     
    	private JMenuBar jmb_barreMenu;
    	private JMenu jm_menu;
    	private JMenuItem jmi_sauvegarder,jmi_quitter;
     
     
    	public PresentationProduit(Gestionnaire g)
    	{
    		setGestionnaire(g);	
     
    		JPanel panelGeneral = new JPanel(new GridLayout(2,1));
     
     
    		JPanel panel = new JPanel();
    		panel.setBorder(new TitledBorder(new EtchedBorder(),"Produits"));
    		GroupLayout gl = new GroupLayout(panel);
    		panel.setLayout(gl);
     
    		gl.setHorizontalGroup(gl.createParallelGroup()
    				.addComponent(getJsp_defilement())
    		);
    		gl.setVerticalGroup(gl.createSequentialGroup()
    				.addComponent(getJsp_defilement())			
    		);
     
    		JPanel panel2 = new JPanel();
    		GroupLayout gl2 = new GroupLayout(panel2);
    		panel2.setLayout(gl2);
    		gl2.setHorizontalGroup(gl2.createSequentialGroup()
     
    				.addGap(25)
    				.addComponent(getJb_modifier())
    				.addGap(150)
    				.addComponent(getJb_ajouter())
    				.addGap(145)
    				.addComponent(getJb_supprimer())
     
    		);
    		gl2.setVerticalGroup(gl2.createParallelGroup()
     
    				.addComponent(getJb_modifier())	
    				.addComponent(getJb_ajouter())
    				.addComponent(getJb_supprimer())
    		);
     
     
    		panelGeneral.add(panel);
    		panelGeneral.add(panel2);
     
    		this.setContentPane(panelGeneral);
     
    		this.setJMenuBar(getJmb_barreMenu());
    		this.setVisible(true);
    		this.setSize(new Dimension(600,500));
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    	}
     
    	public Gestionnaire getGestionnaire()
    	{
    		return listeProduit;
    	}
    	public void setGestionnaire(Gestionnaire g)
    	{
    		listeProduit = g;
    	}
     
    	public JTable getJt_afficherDonnee()
    	{
    		if(jt_afficherDonnee == null)
    		{
    			//declaration de la matrice contenant tout les produits
    			Object[][] produit = new Object[listeProduit.getListeProduit().size()][5];
    			//on affecte les produit au differente ligne de la JTable
    			for(int i=0;i<listeProduit.getListeProduit().size();i++)
    			{
    				produit[i][0] = listeProduit.getListeProduit().get(i).getNom();
    				produit[i][1] = listeProduit.getListeProduit().get(i).getNumero();
    				produit[i][2] = listeProduit.getListeProduit().get(i).getQuantite();
    				produit[i][3] = listeProduit.getListeProduit().get(i).getPrix();
    				produit[i][4] = listeProduit.getListeProduit().get(i).getPrixTotal();
     
    			}
     
    			//création du JTable
    			jt_afficherDonnee = new JTable(produit,nomColonneJTable);
     
    		}
    		return jt_afficherDonnee;
    	}
     
    	public JScrollPane getJsp_defilement()
    	{
    		if(jsp_defilement == null)
    		{
    			jsp_defilement = new JScrollPane(getJt_afficherDonnee());	
    		}
    		return jsp_defilement;
    	}
     
    	public JButton getJb_modifier()
    	{
    		if(jb_modifier == null)
    		{
    			jb_modifier = new JButton("modifier");
     
    			jb_modifier.addActionListener(new PresentationProduitController(this));
    		}
    		return jb_modifier;
    	}
    	public JButton getJb_supprimer()
    	{
    		if(jb_supprimer == null)
    		{
    			jb_supprimer = new JButton("supprimer");
    			jb_supprimer.addActionListener(new PresentationProduitController(this));
    		}
    		return jb_supprimer;
    	}
    	public JButton getJb_ajouter()
    	{
    		if(jb_ajouter == null)
    		{
    			jb_ajouter = new JButton("ajouter");
    			jb_ajouter.addActionListener(new PresentationProduitController(this));
    		}
    		return jb_ajouter;
    	}
    	public JMenuBar getJmb_barreMenu()
    	{
    		if(jmb_barreMenu == null)
    		{
    			jmb_barreMenu = new JMenuBar();
    			jmb_barreMenu.add(getJm_menu());
    		}
    		return jmb_barreMenu;
    	}
     
    	public JMenu getJm_menu()
    	{
    		if(jm_menu == null)
    		{
    			jm_menu = new JMenu("Fichier");
    			jm_menu.add(getJmi_sauvegarder());
    			jm_menu.add(getJmi_quitter());
    		}
    		return jm_menu;
    	}
    	public JMenuItem getJmi_quitter()
    	{
    		if(jmi_quitter == null)
    		{
    			jmi_quitter = new JMenuItem("Quitter");
    			jmi_quitter.addActionListener(new PresentationProduitController(this));
    		}
    		return jmi_quitter;
    	}
    	public JMenuItem getJmi_sauvegarder()
    	{
    		if(jmi_sauvegarder == null)
    		{
    			jmi_sauvegarder = new JMenuItem("Sauvegarder");
    			jmi_sauvegarder.addActionListener(new PresentationProduitController(this));
    		}
    		return jmi_sauvegarder;
    	}
    }
    faut-il obligatoirement gérer les données de la JTable via une classe qui étend AbstractTableModel?

  6. #6
    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
    Citation Envoyé par dharkan Voir le message
    faut-il obligatoirement gérer les données de la JTable via une classe qui étend AbstractTableModel?
    C'est la façon propre de procéder.
    Je te conseille d'ailleurs de façon impérative la lecture du tuto suivant: http://baptiste-wicht.developpez.com.../swing/jtable/ pour comprendre le fonctionnement du composant JTable et l'utilité des modèles basé sur AbstractTabelModel
    Sinon tu peux passer par des outils comme le BeanTableModel (qui lui même hérite d'AbstractTableModel).

Discussions similaires

  1. [Swing] Afficher une JTable speciale en java
    Par benssj5 dans le forum Composants
    Réponses: 6
    Dernier message: 12/03/2013, 20h21
  2. focus dans une cellule d'une JTable
    Par coil dans le forum Composants
    Réponses: 5
    Dernier message: 07/07/2010, 17h15
  3. [JTable] coloration des lignes d'une JTable
    Par MathiasM dans le forum Composants
    Réponses: 3
    Dernier message: 22/06/2009, 10h19
  4. [JTable]Selectionner une seule ligne d'une jTable ?
    Par Maximus32 dans le forum Composants
    Réponses: 2
    Dernier message: 22/10/2004, 02h06
  5. Non réception d'un evènement sur une JTable
    Par Kant dans le forum Composants
    Réponses: 4
    Dernier message: 28/05/2004, 10h38

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