จะทำให้JTable
ไม่สามารถแก้ไขได้อย่างไร? ฉันไม่ต้องการให้ผู้ใช้ของฉันสามารถแก้ไขค่าในเซลล์ได้โดยดับเบิลคลิกที่ค่าเหล่านั้น
จะทำให้JTable
ไม่สามารถแก้ไขได้อย่างไร? ฉันไม่ต้องการให้ผู้ใช้ของฉันสามารถแก้ไขค่าในเซลล์ได้โดยดับเบิลคลิกที่ค่าเหล่านั้น
คำตอบ:
คุณสามารถใช้ไฟล์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()));