Làm thế nào để tạo JTable
không thể chỉnh sửa? Tôi không muốn người dùng của mình có thể chỉnh sửa giá trị trong ô bằng cách nhấp đúp vào chúng.
Làm thế nào để tạo JTable
không thể chỉnh sửa? Tôi không muốn người dùng của mình có thể chỉnh sửa giá trị trong ô bằng cách nhấp đúp vào chúng.
Câu trả lời:
Bạn có thể sử dụng a TableModel
.
Xác định một lớp như thế này:
public class MyModel extends AbstractTableModel{
//not necessary
}
thực sự isCellEditable()
là false
theo mặc định, vì vậy bạn có thể bỏ qua nó. (xem: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )
Sau đó, sử dụng setModel()
phương pháp của bạn JTable
.
JTable myTable = new JTable();
myTable.setModel(new MyModel());
public void
phương thức trả về một boolean.
isCellEditable
Bạn có thể ghi đè phương thức isCellEditable và triển khai như bạn muốn, ví dụ:
//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
table.setModel(tableModel);
hoặc là
//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);
Lưu ý nếu JTable của bạn biến mất
Nếu của bạn JTable
biến mất khi bạn sử dụng điều này, rất có thể vì bạn cần sử dụng hàm DefaultTableModel(Object[][] data, Object[] columnNames)
tạo thay thế.
//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);
chỉ cần thêm
table.setEnabled(false);
Việc này ổn với tôi.
Nếu bạn đang tạo TableModel tự động từ một tập hợp các giá trị (với "JTable (Vector, Vector) mới"), có lẽ việc xóa trình chỉnh sửa khỏi các cột sẽ dễ dàng hơn:
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
}
Nếu không có người chỉnh sửa, dữ liệu sẽ không thể chỉnh sửa được.
new JTable(Vector, Vector)
và hiệu quả với tôi. Tôi không cần biên tập viên trong phòng giam, vì vậy bạn có phiếu bầu của tôi.
Tôi đã sử dụng cái này và nó hoạt động: nó rất đơn giản và hoạt động tốt.
JTable myTable = new JTable();
myTable.setEnabled(false);
tạo lớp DefaultCellEditor mới:
public static class Editor_name extends DefaultCellEditor {
public Editor_name(JCheckBox checkBox) {
super(checkBox);
}
@Override
public boolean isCellEditable(EventObject anEvent) {
return false;
}
}
và sử dụng setCellEditor:
JTable table = new JTable();
table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox()));