Comment rendre un JTable non modifiable

Comment rendre un JTable non modifiable? Je ne veux pas que mes utilisateurs puissent modifier les valeurs dans les cellules en double-cliquant dessus.

Vous pouvez utiliser un TableModel .

Définissez une classe comme celle-ci:

 public class MyModel extends AbstractTableModel{ //not necessary } 

En fait, isCellEditable() est false par défaut, vous pouvez donc l’omettre. (voir: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )

Ensuite, utilisez la méthode JTable setModel() de votre JTable .

 JTable myTable = new JTable(); myTable.setModel(new MyModel()); 

Vous pouvez remplacer la méthode isCellEditable et implémenter comme vous le souhaitez, par exemple:

 //instance table model DefaultTableModel tableModel = new DefaultTableModel() { @Override public boolean isCellEditable(int row, int column) { //all cells false return false; } }; table.setModel(tableModel); 

ou

 //instance table model DefaultTableModel tableModel = new DefaultTableModel() { @Override public boolean isCellEditable(int row, int column) { //Only the third column return column == 3; } }; table.setModel(tableModel); 

Remarque si votre JTable disparaît

Si votre JTable disparaît lorsque vous l’utilisez, c’est probablement parce que vous devez utiliser le constructeur DefaultTableModel(Object[][] data, Object[] columnNames) .

 //instance table model DefaultTableModel tableModel = new DefaultTableModel(data, columnNames) { @Override public boolean isCellEditable(int row, int column) { //all cells false return false; } }; table.setModel(tableModel); 

Ajoutez simplement

 table.setEnabled(false); 

Ça fonctionne bien pour moi.

 table.setDefaultEditor(Object.class, null); 

Si vous créez automatiquement le TableModel à partir d’un ensemble de valeurs (avec “new JTable (Vector, Vector)”), il est peut-être plus facile de supprimer les éditeurs des colonnes:

 JTable table = new JTable(my_rows, my_header); for (int c = 0; c < table.getColumnCount(); c++) { Class col_class = table.getColumnClass(c); table.setDefaultEditor(col_class, null); // remove editor } 

Sans les éditeurs, les données ne seront pas modifiables.

J’ai utilisé ceci et cela a fonctionné: c’est très simple et fonctionne bien.

 JTable myTable = new JTable(); myTable.setEnabled(false); 

créer une nouvelle classe DefaultCellEditor:

 public static class Editor_name extends DefaultCellEditor { public Editor_name(JCheckBox checkBox) { super(checkBox); } @Override public boolean isCellEditable(EventObject anEvent) { return false; } } 

et utilisez setCellEditor:

 JTable table = new JTable(); table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox()));