Essaie avec un modèle de tableau par défaut (DefaultTableModel).
Un DefaultTableModel peut être considéré comme un tableau à 2 dimensions.
Toutefois, il a des méthodes pour ajouter ou supprimer de nouvelles lignes / colonnes, par exemple "addRow".
Voici un petit exemple de code:
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.table.*;
public class JTableDemo {
private final DefaultTableModel model;
private final JTable table;
public JTableDemo() {
// column names
String[] titles = new String[]{"Title 0", "Title 1", "Title 2", "Title 3"};
// The model we use. Here we set the titles,
// but later on it is still possible to add more columns and/or rows:
model = new DefaultTableModel(titles, 0);
// initialize the JTable:
table = new JTable(model);
// buttons to control the table:
final JButton buttonAddRow = new JButton("add row");
final JButton buttonRemRow = new JButton("remove row");
final JButton buttonAddCol = new JButton("add column");
buttonRemRow.setEnabled(false);
// give actions to the buttons:
buttonAddRow.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
// the number of columns
int size = model.getColumnCount();
// create a new vector for row data
Vector rowData = createDataVector("row", size);
// add a new row
model.addRow(rowData);
// enable remove row
buttonRemRow.setEnabled(true);
}
});
buttonAddCol.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
int size = model.getRowCount();
Vector columnData = createDataVector("column", size);
String name = "Title " + model.getColumnCount();
model.addColumn(name, columnData);
}
});
buttonRemRow.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
int size = model.getRowCount();
int index = (int) (Math.random() * size);
model.removeRow(index);
buttonRemRow.setEnabled(size > 1);
}
});
JFrame frame = new JFrame("JTableDemo");
Container content = frame.getContentPane();
content.add(new JScrollPane(table), BorderLayout.CENTER);
content.add(buttonAddRow, BorderLayout.NORTH);
content.add(buttonRemRow, BorderLayout.SOUTH);
content.add(buttonAddCol, BorderLayout.WEST);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public static void main(final String[] args) {
Runnable gui = new Runnable() {
public void run() {
JTableDemo jTableDemo = new JTableDemo();
}
};
SwingUtilities.invokeLater(gui);
}
private Vector createDataVector(final String prefix, final int size) {
Vector vector = new Vector(size);
for (int i = 0; i < size; i++) {
int rows = model.getRowCount();
int columns = model.getColumnCount();
vector.add(prefix + " : "
+ (prefix.equals("row") ? rows : columns)
+ " : " + i);
}
return vector;
}
}