Bonjour,

Je suis débutante et je tente de mettre un TableModelListener sur un Jtable pour pouvoir mettre à jour le tableau lorsqu'on ajoute un item en cliquant sur un bouton.
Tout ce que je réussis à faire est de générer un nouveau tableau après l'insertion du nouvel item! Il y a certainement un autre moyen de le faire.
J'ai vu un exemple avec updateUI() sur la table, mais je n'arrive pas à le reproduire.
J'ai compris qu'avec un TableModelListener, il faut une méthode du genre «ajouter le nouvel item à la liste» puis applique la méthode fireTableDataChanged() sur le modèle de la table... mais je n'y arrive pas! Il y a toujours ce message que je ne peux pas mettre une méthode non-statique dans la méthode du ActionListener du bouton.
Qu'est-ce que je n'ai pas compris?
Où est mon erreur?
J'ai tenté de faire un exemple au plus simple (même si ça fait pas mal de code!) que je joint ici.


Merci d'avance!

Mireille

Ici, la classe de la JTable et du modèle.

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
 
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.Dimension;
import javax.swing.JPanel;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
 
 
public class Table extends JPanel {
 
  private JTable table;
  private ModeleTable model;
 
 
  public Table(){  
    super();
    table = new JTable();
    model = new ModeleTable();
    table.setModel(model);
    table.setPreferredScrollableViewportSize(new Dimension(300, 100));
    table.setFillsViewportHeight(true); // à quoi ca sert???
 
    table.getModel().addTableModelListener(new TableModelListener() {
      @Override
      public void tableChanged(TableModelEvent event) {
         System.out.println(event);
 
      }
    });
 
    JScrollPane scrollPane = new JScrollPane(table);
    add(scrollPane);
    }
 
  public void update() {
    model.fireTableDataChanged();
    //table.updateUI();
    }
 
  public ModeleTable getModel() {
    return model;
  }
 
   public JTable getTable() {
    return table;
  }
 
}
 
 
 
 class ModeleTable extends AbstractTableModel {
 
  private boolean DEBUG = false;
  private final String TITRE = "<html><b>Saluation</b></html>";
 
 
  @Override
  public int getRowCount() {
    return Test.getList().size();
  }
 
  @Override
  public int getColumnCount() {
    return 1;
  }
 
  @Override
  public String getColumnName(int column) {
      if(column == 0) {
        return TITRE;
      } else {
          return "erreur";
      }
  }
 
  @Override
  public Object getValueAt(int rowIndex, int columnIndex) { 
    switch (columnIndex) {
      case 0:
        return Test.getList().get(rowIndex);
      default:
        return Test.getList().get(rowIndex);
    }
  } 
 
  @Override
  public void setValueAt(Object value, int rowIndex, int columnIndex) {
    switch (columnIndex) {
      case 0:
        Test.getList().get(rowIndex);   
        break;
      default:
        Test.getList().get(rowIndex);
        break;
    }
    fireTableRowsUpdated(rowIndex, columnIndex);
  }
 
}
Et ici la classe de test.

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
 
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class Test {
 
  private static ArrayList<String> list;
  private JPanel panelTable;
  private JPanel panelAjout;
 
  public Test() {
   createGui(); 
  }
 
  public void createGui() {
    list = new ArrayList<>();
    list.add("Allo");
    list.add("Bonjour");
    list.add("Salut");
 
 
    JFrame frame = new JFrame();
    panelTable = new Table();
    panelAjout = new JPanel();
 
    JButton bouton = new JButton("Ajouter");   
    bouton.addActionListener(new ActionListener(){  
      @Override
      public void actionPerformed(ActionEvent event){   
        System.out.println("ajout - Hi!");
        list.add("Hi!");
        //Table.update();
       frame.remove(panelTable);
       frame.add(new Table());
       frame.revalidate();
      }
    });    
    panelAjout.add(bouton);
 
 
    frame.add(panelTable, BorderLayout.NORTH);
    frame.add(panelAjout);
 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("Test table update");    
    frame.setBounds (200, 150, 500, 500);    
    frame.setVisible(true);
  }
 
  public static ArrayList<String> getList() {
    return list;
  }
 
  public static void main(String[] params) {
    Test test = new Test();
  }
 
}