Como fazer um JTable
não editável? Não quero que meus usuários possam editar os valores nas células clicando duas vezes neles.
Como fazer um JTable
não editável? Não quero que meus usuários possam editar os valores nas células clicando duas vezes neles.
Respostas:
Você pode usar um TableModel
.
Defina uma classe assim:
public class MyModel extends AbstractTableModel{
//not necessary
}
na verdade, isCellEditable()
é false
por padrão, então você pode omiti-lo. (consulte: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )
Em seguida, use o setModel()
método de seu JTable
.
JTable myTable = new JTable();
myTable.setModel(new MyModel());
public void
método retorne um booleano.
isCellEditable
Você pode substituir o método isCellEditable e implementar como quiser, por exemplo:
//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);
Nota para se o seu JTable desaparecer
Se o seu JTable
estiver desaparecendo quando você usar isso, é mais provável que você precise usar o DefaultTableModel(Object[][] data, Object[] columnNames)
construtor.
//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);
apenas adicione
table.setEnabled(false);
Isso funciona bem para mim.
Se você estiver criando o TableModel automaticamente a partir de um conjunto de valores (com "new JTable (Vector, Vector)"), talvez seja mais fácil remover editores de colunas:
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
}
Sem editores, os dados não serão editáveis.
new JTable(Vector, Vector)
e funcionou para mim. Não preciso de editor em nenhuma célula, então você tem meu voto.
Eu usei isso e funcionou: é muito simples e funciona bem.
JTable myTable = new JTable();
myTable.setEnabled(false);
crie uma nova classe DefaultCellEditor:
public static class Editor_name extends DefaultCellEditor {
public Editor_name(JCheckBox checkBox) {
super(checkBox);
}
@Override
public boolean isCellEditable(EventObject anEvent) {
return false;
}
}
e use setCellEditor:
JTable table = new JTable();
table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox()));