¿Cómo hacer que un JTable
no sea editable? No quiero que mis usuarios puedan editar los valores de las celdas haciendo doble clic en ellas.
Respuestas
¿Demasiados anuncios?Puedes anular el método isCellEditable e implementarlo como desees, por ejemplo:
// instancia del modelo de la tabla
DefaultTableModel tableModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
// todas las celdas son falsas
return false;
}
};
table.setModel(tableModel);
o
// instancia del modelo de la tabla
DefaultTableModel tableModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
// solo la tercera columna
return column == 3;
}
};
table.setModel(tableModel);
Nota si tu JTable desaparece
Si tu JTable
desaparece cuando usas esto, es probablemente porque necesitas utilizar el constructor DefaultTableModel(Object[][] data, Object[] columnNames)
en su lugar.
// instancia del modelo de la tabla
DefaultTableModel tableModel = new DefaultTableModel(data, columnNames) {
@Override
public boolean isCellEditable(int row, int column) {
// todas las celdas son falsas
return false;
}
};
table.setModel(tableModel);
Puedes usar un TableModel
.
Define una clase así:
public class MyModel extends AbstractTableModel{
//no es necesario
}
en realidad isCellEditable()
es false
por defecto, por lo que puedes omitirlo. (ver: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html)
Luego usa el método setModel()
de tu JTable
.
JTable myTable = new JTable();
myTable.setModel(new MyModel());
Si está creando automáticamente el TableModel a partir de un conjunto de valores (con "new JTable(Vector, Vector)"), quizás sea más fácil eliminar los editores de las columnas:
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
}
Sin editores, los datos no serán editables.
Crear nueva clase DefaultCellEditor:
public static class Editor_nombre extends DefaultCellEditor {
public Editor_nombre(JCheckBox checkBox) {
super(checkBox);
}
@Override
public boolean isCellEditable(EventObject anEvent) {
return false;
}
}
y usar setCellEditor:
JTable table = new JTable();
table.getColumn("nombreColumna").setCellEditor(new Editor_nombre(new JCheckBox()));