Ajout de lignes dans une JTable de manière dynamqiue
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:
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
Code:
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);
}
}
} |
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