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 :

[Java] Rafraichir Tableau (JTable)


Sujet :

Composants Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Par défaut [Java] Rafraichir Tableau (JTable)
    Bonjour,
    Je dispose d'un tableau dans mon onglet "Historique"
    dont en voici le code :

    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                     DefaultTableModel dm = new DefaultTableModel();
    		dm.setDataVector(
    		dataTable2, // merci à scriptiz ;)
    		new Object[] { "Connexion à", "Password :", "le " });
     
    		final JTable table = new JTable(dm);
    		panel3.add(table);
    		JScrollPane scroll = new JScrollPane(table);
    		panel3.add(scroll);
    		table.getTableHeader().setReorderingAllowed(false);
    		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    Au dessous de ce tableau, il y a un bouton "Rafraichir" qui actuellement ne marche pas,
    vous l'aurez deviné, j'aimerai que lorsque l'on clique sur "Rafraichir" que cela rafraichisse le tableau en question (car c'est un historique, et lorsque l'utilisateur clique sur un bouton, cela rajoute une ligne dans le tableau, mais qui est visible seulement si on redémarre le logiciel), c'est pour cela que j'aimerai assigner un rafraichissement du tableau à mon Bouton, pour éviter de devoir redémarrer mon logiciel pour pouvoir voir la ligne dans le tableau.

    Problème :

    - Je dois redémarrer le logiciel pour pouvoir voir apparaitre ma ligne dans le tableau.

    Question :

    - Comment rafraichir mon tableau (JTable table) lorsqu'on clique sur le bouton "Rafraichir"

    Merci d'avance,
    SoGeek.
    Bonne journée

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Par défaut Code :)
    Bonjour, en fait voilà mon code vraiment complet (car je split un fichier avant)

    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
     
     panel3 = new JPanel(); 
     Border border = BorderFactory.createTitledBorder("Historique"); 
     panel3.setBorder(border); 
     
     String appData = System.getenv("APPDATA") + "\\"; 
     
     String fichier = appData + "historique.log"; 
     
     try 
     { 
      InputStream ips = new FileInputStream(fichier); 
     
      InputStreamReader ipsr = new InputStreamReader(ips); 
     
      BufferedReader br = new BufferedReader(ipsr); 
     
      String ligne; 
     
      String[][] dataTable = new String[100][3]; 
      int compteur = 0; 
     
      while ((ligne=br.readLine())!= null) 
      { 
       String str = ligne; 
     
       String[] temp; 
     
       String delimiter = "#"; 
     
       temp = str.split(delimiter); 
     
       for(int i = 0; i < temp.length ; i++) 
        dataTable[compteur][i] = temp[i]; 
     
       compteur++;  
      } 
     
      final String[][] dataTable2 = new String[compteur][3]; 
      for(int i = 0; i < compteur; i++) 
      { 
       for(int j = 0; j < dataTable[i].length; j++) 
       { 
        dataTable2[i][j] = dataTable[i][j]; 
       } 
      } 
     
      final Object[][] data = dataTable2; 
      String  title[] = {"Connexion à", "Password", "Le"}; 
     
      final ZModel model = new ZModel(data, title); 
      final JTable table = new JTable(model); 
      JScrollPane scroll = new JScrollPane(table); 
      panel3.add(scroll); 
      table.getTableHeader().setReorderingAllowed(false); 
      table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
         ListSelectionModel selModel = table.getSelectionModel(); 
         panel3.revalidate(); 
         table.revalidate(); 
         model.setData(dataTable2); 
     
     
     
     
    et voici la class ZModel que j'ai crée pour pouvoir "Rafraichir"
     
     
    class ZModel extends AbstractTableModel{ 
     
     private Object[][] data; 
     private String[] title; 
     
     public ZModel(Object[][] data, String[] title){ 
      this.data = data; 
      this.title = title; 
     } 
     
     
     public int getColumnCount() { 
      return this.title.length; 
     } 
     
     
     public int getRowCount() { 
      return this.data.length; 
     } 
     
     
     public Object getValueAt(int row, int col) { 
      return this.data[row][col]; 
     } 
     
     public String getColumnName(int col) { 
     return this.title[col]; 
      } 
     
     public void setData(Object[][] newData){ 
     data = newData; 
      super.fireTableDataChanged(); 
        } 
     
     
    }
    et donc je modifie la création de mon tableau comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    		final Object[][] data = dataTable2;
    		String  title[] = {"Connexion à", "Password", "Le"};
     
    		final ZModel model = new ZModel(data, title);
    		final JTable table = new JTable(model);
    		JScrollPane scroll = new JScrollPane(table);
    		panel3.add(scroll);
    		table.getTableHeader().setReorderingAllowed(false);
    		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    et ainsi, j'associe cette commande à mon bouton rafraichir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    model.setData(data); 
    ou 
    model.setData(newData); 
    ou 
    model.setData(dataTable2);


    Mais rien ne marche
    Une petite idée ?
    Cordialement,
    SoGeek, & bonne journée

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    salut,
    pourquoi tu as mis en final ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    final ZModel model = new ZModel(data, title);
    		final JTable table = new JTable(model);
    c'est pas dans ton model qu'il faut réactualiser c'est ta table !!
    vu que ta table est une JTable étendu de ton model.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    model.setData(dataTable2);

    donc tu vires final sur le model et la table, et puis tu donnes à ta table les nouvelles données !

  4. #4
    Membre confirmé
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Par défaut
    Salut,

    j'ai pas lu tout ton code mais pour actualiser un JTable, il suffit de faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    model.fireTableDataChanged();
    avec "model" est ton AbstractTableModel.
    Cette méthode permet simplement d'indiquer à ton modèle que les données ont changées!


    Cordialement,
    Masterchief

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    son modèle est bien défini avec le fireTableDataChanged(); dans la méthode setData(), donc pas de problème.

    il fait
    table.setData( Data ) et c'est bon

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 32
    Par défaut
    Autant pour moi...

    C'est ça d'être feignant... ^^

    Mais du coup je ne vois pas du tout d'où peut venir le problème...

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    il n'y a pas de mal !
    Et bien normalement il n'y a pas de problème sauf qu'il ne répond pas

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/03/2010, 00h18
  2. Rafraichir une JTable
    Par vega_55 dans le forum Débuter
    Réponses: 2
    Dernier message: 29/10/2008, 17h58
  3. Rafraichir une jtable
    Par tit_oune dans le forum Composants
    Réponses: 5
    Dernier message: 12/04/2006, 15h00
  4. Comment rafraichir une JTable
    Par critok dans le forum Composants
    Réponses: 3
    Dernier message: 06/12/2005, 13h48
  5. [JTable] Rafraichir une JTable
    Par Invité dans le forum Composants
    Réponses: 4
    Dernier message: 08/12/2004, 13h40

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