Bonjour,
Je souhaiterais avoir une information par rapport à l'ajout de lignes dynamiques dans une JTable.
Voici le code de la JTable avec le modèle qui étend la classe abstractModel (seule la méthode addRow est précisée ici)
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 public class MaTable extends JTable { private MonModel model; private final TableRowSorter<MonModel> sorter; private List<String> donnees; String[] tab = {"Annee", "mois", "jour"}; private final String[] columnName = { "Col1", "Col2", "Col3" }; public MaTable() { this.donnees = new ArrayList<String>(); donnees.add(tab[0]); donnees.add(tab[1]); donnees.add(tab[2]); Object[][] data = { {new JButton("btn1"), donnees.get(0), new JButton("btn_1")}, {new JButton("btn2"), donnees.get(1), new JButton("btn_2")}, {new JButton("btn3"), donnees.get(2), new JButton("btn_3")} }; this.model = new MonModel(data , columnName ); this.sorter = new TableRowSorter<MonModel>(model); this.setModel(model); this.setDefaultRenderer(JButton.class, new TableRenderer()); model.fireTableStructureChanged(); } public MonModel getModel() { return model; } class MonModel extends AbstractTableModel { private String[] columnName; private Object [] [] data; public MonModel(Object [] [] data, String[] columnName) { this.data = data; this.columnName = columnName; } public void addRow(Object[] ajout){ int indice = 0, nbRow = this.getRowCount(), nbCol = this.getColumnCount(); Object temp[][] = this.data; this.data = new Object[nbRow+1][nbCol]; this.data[indice] = ajout; for(Object[] value : temp) { indice+=1; this.data[indice] = value; } temp = null; this.fireTableDataChanged(); } }
Le but est de pouvoir ajouter une ligne lorsque l'on clique sur le bouton + du JPanel. Voici le reste du code
Lorque je clique sur le bouton "+", la nouvelle ligne s'affiche bien en haut du tableau mais je n'ai que 3 lignes au total au lieu de 4. Je perds la ligne {new JButton("btn3"), donnees.get(2), new JButton("btn_3")}. Si je reclique sur + j'ai un arrayOutOfBoundException. Je ne comprends pas ce qu'il faut modifier pour ajouter une ligne de manière dynamique (en gardant biensur les lignes existantes). Merci beaucoup d'avance pour votre aide
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 public class MonPanel extends JPanel implements ActionListener { private final MaTable maTable; private final JButton plusButton; private final JScrollPane scrollPane; public MonPanel() { this.maTable = new MaTable(); this.plusButton = new JButton("+"); this.scrollPane = new JScrollPane(); this.setLayout(new BorderLayout()); scrollPane.setViewportView(maTable); this.add(plusButton, borderLayout.NORTH); this.add(scrollPane, borderLayout.CENTER); this.setVisible(true); plusButton.addActionListener(this); } public void actionPerformed(ActionEvent e) { if ((e.getSource() == plusButton)) { Object [] ajout = new Object [] {new JButton("btn0"), "heure", new JButton("btn_0")}; (maTable.getModel()).addRow(ajout); } } }
Partager