Как сделать JTable
недоступным для редактирования? Я не хочу, чтобы мои пользователи могли редактировать значения в ячейках, дважды щелкая их.
Как сделать JTable недоступным для редактирования
Ответы (7)
Вы можете использовать TableModel
.
Определите такой класс:
public class MyModel extends AbstractTableModel{
//not necessary
}
на самом деле isCellEditable()
по умолчанию false
, поэтому вы можете его опустить. (см .: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html).
Затем используйте метод setModel()
вашего JTable
.
JTable myTable = new JTable();
myTable.setModel(new MyModel());
public void
, возвращающего логическое значение.
- person Geo; 02.01.2010
isCellEditable
- person Matt; 02.01.2010
Вы можете переопределить метод isCellEditable и реализовать как хотите, например:
//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
table.setModel(tableModel);
or
//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);
Примечание на случай исчезновения JTable
Если ваш JTable
исчезает при его использовании, это, скорее всего, связано с тем, что вам нужно использовать _ 4_ вместо этого.
//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.setEnabled(false);
Он отлично работает для меня.
setCellSelectionEnabled()
помочь? Я подозреваю, что отключенные цвета ячеек по умолчанию можно переопределить, по крайней мере, с помощью setOpaque(false)
и использования содержащего цвет фона JPanel.
- person Will Nielsen; 28.01.2014
Если вы создаете TableModel автоматически из набора значений (с помощью «new JTable (Vector, Vector)»), возможно, проще удалить редакторы из столбцов:
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
}
Без редакторов данные нельзя будет редактировать.
new JTable(Vector, Vector)
и работал на себя. Мне не нужен редактор ни в одной ячейке, так что мой голос за вас.
- person Dani Sancas; 18.12.2014
Я использовал это, и это сработало: это очень просто и отлично работает.
JTable myTable = new JTable();
myTable.setEnabled(false);
создать новый класс DefaultCellEditor:
public static class Editor_name extends DefaultCellEditor {
public Editor_name(JCheckBox checkBox) {
super(checkBox);
}
@Override
public boolean isCellEditable(EventObject anEvent) {
return false;
}
}
и используйте setCellEditor:
JTable table = new JTable();
table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox()));