Jak uczynić JTable
nieedytowalnym? Nie chcę, aby moi użytkownicy mogli edytować wartości w komórkach, klikając je dwukrotnie.
Jak uczynić JTable
nieedytowalnym? Nie chcę, aby moi użytkownicy mogli edytować wartości w komórkach, klikając je dwukrotnie.
Odpowiedzi:
Możesz użyć TableModel
.
Zdefiniuj klasę w ten sposób:
public class MyModel extends AbstractTableModel{
//not necessary
}
w rzeczywistości isCellEditable()
jest to false
ustawienie domyślne, więc możesz je pominąć. (patrz: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )
Następnie użyj setModel()
metody swojego JTable
.
JTable myTable = new JTable();
myTable.setModel(new MyModel());
public void
metody zwracającej wartość logiczną.
isCellEditable
Możesz zastąpić metodę isCellEditable i zaimplementować ją tak, jak chcesz, na przykład:
//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
table.setModel(tableModel);
lub
//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);
Zwróć uwagę, jeśli twój JTable zniknie
Jeśli twój JTable
znika, gdy go używasz, najprawdopodobniej musisz użyć DefaultTableModel(Object[][] data, Object[] columnNames)
konstruktora.
//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);
poprostu dodaj
table.setEnabled(false);
to działa dobrze dla mnie.
Jeśli tworzysz model TableModel automatycznie z zestawu wartości (z „nowym JTable (Vector, Vector)”), być może łatwiej będzie usunąć edytory z kolumn:
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
}
Bez edytorów danych nie będzie można edytować.
new JTable(Vector, Vector)
i pracowałem dla mnie. Nie potrzebuję redaktora w żadnej komórce, więc masz mój głos.
Użyłem tego i zadziałało: jest bardzo proste i działa dobrze.
JTable myTable = new JTable();
myTable.setEnabled(false);
utwórz nową klasę DefaultCellEditor:
public static class Editor_name extends DefaultCellEditor {
public Editor_name(JCheckBox checkBox) {
super(checkBox);
}
@Override
public boolean isCellEditable(EventObject anEvent) {
return false;
}
}
i użyj setCellEditor:
JTable table = new JTable();
table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox()));