¿Cómo hacer un JTable
no editable? No quiero que mis usuarios puedan editar los valores en las celdas haciendo doble clic en ellas.
¿Cómo hacer un JTable
no editable? No quiero que mis usuarios puedan editar los valores en las celdas haciendo doble clic en ellas.
Respuestas:
Puede utilizar un TableModel
.
Defina una clase como esta:
public class MyModel extends AbstractTableModel{
//not necessary
}
en realidad isCellEditable()
está false
por defecto, por lo que puede omitirlo. (ver: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )
Entonces usa el setModel()
método de tu JTable
.
JTable myTable = new JTable();
myTable.setModel(new MyModel());
public void
método devuelva un booleano.
isCellEditable
Puede anular el método isCellEditable e implementarlo como desee, por ejemplo:
//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
table.setModel(tableModel);
o
//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);
Nota para si su JTable desaparece
Si JTable
está desapareciendo cuando usa esto, lo más probable es que deba usar el DefaultTableModel(Object[][] data, Object[] columnNames)
constructor en su lugar.
//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);
table.setDefaultEditor(Object.class, null);
solo agrega
table.setEnabled(false);
Funciona bien para mí.
Si está creando el TableModel automáticamente a partir de un conjunto de valores (con "new JTable (Vector, Vector)"), quizás sea más fácil eliminar editores de 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 se podrán editar.
new JTable(Vector, Vector)
y funcionó para mí. No necesito editor en ninguna celda, así que tienes mi voto.
Usé esto y funcionó: es muy simple y funciona bien.
JTable myTable = new JTable();
myTable.setEnabled(false);
crear una nueva clase DefaultCellEditor:
public static class Editor_name extends DefaultCellEditor {
public Editor_name(JCheckBox checkBox) {
super(checkBox);
}
@Override
public boolean isCellEditable(EventObject anEvent) {
return false;
}
}
y use setCellEditor:
JTable table = new JTable();
table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox()));