Як зробити JTable
нередаговане? Я не хочу, щоб мої користувачі мали можливість редагувати значення в клітинках, двічі клацнувши їх.
Як зробити JTable
нередаговане? Я не хочу, щоб мої користувачі мали можливість редагувати значення в клітинках, двічі клацнувши їх.
Відповіді:
Ви можете використовувати a 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
метод, який повертає логічне значення.
isCellEditable
Ви можете замінити метод isCellEditable і реалізувати як завгодно, наприклад:
//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
table.setModel(tableModel);
або
//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
зникає, коли ви використовуєте це, швидше за все, тому, що вам потрібно використовувати DefaultTableModel(Object[][] data, Object[] columnNames)
конструктор замість цього.
//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);
просто додайте
table.setEnabled(false);
у мене це прекрасно працює.
Якщо ви створюєте 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)
і працював для мене. Мені не потрібен редактор у жодній камері, тож ви маєте мій голос.
Я використовував це, і це спрацювало: це дуже просто і чудово працює.
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()));