Bagaimana cara membuat JTable
non-editable? Saya tidak ingin pengguna saya dapat mengedit nilai dalam sel dengan mengklik dua kali.
Bagaimana cara membuat JTable
non-editable? Saya tidak ingin pengguna saya dapat mengedit nilai dalam sel dengan mengklik dua kali.
Jawaban:
Anda dapat menggunakan file TableModel
.
Tentukan kelas seperti ini:
public class MyModel extends AbstractTableModel{
//not necessary
}
sebenarnya isCellEditable()
secara false
default sehingga Anda dapat mengabaikannya. (lihat: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )
Kemudian gunakan setModel()
metode Anda JTable
.
JTable myTable = new JTable();
myTable.setModel(new MyModel());
public void
metode yang mengembalikan boolean.
isCellEditable
Anda dapat mengganti metode isCellEditable dan mengimplementasikan sesuai keinginan Anda, misalnya:
//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
table.setModel(tableModel);
atau
//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);
Catatan jika JTable Anda menghilang
Jika Anda JTable
menghilang saat Anda menggunakan ini kemungkinan besar karena Anda perlu menggunakan DefaultTableModel(Object[][] data, Object[] columnNames)
konstruktor sebagai gantinya.
//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);
tambahkan saja
table.setEnabled(false);
itu bekerja dengan baik untuk saya.
Jika Anda membuat TableModel secara otomatis dari sekumpulan nilai (dengan "JTable baru (Vektor, Vektor)"), mungkin lebih mudah untuk menghapus editor dari kolom:
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
}
Tanpa editor, data tidak akan dapat diedit.
new JTable(Vector, Vector)
dan bekerja untuk saya. Saya tidak perlu editor di sel mana pun, jadi Anda memiliki hak pilih.
Saya menggunakan ini dan berhasil: sangat sederhana dan berfungsi dengan baik.
JTable myTable = new JTable();
myTable.setEnabled(false);
buat kelas DefaultCellEditor baru:
public static class Editor_name extends DefaultCellEditor {
public Editor_name(JCheckBox checkBox) {
super(checkBox);
}
@Override
public boolean isCellEditable(EventObject anEvent) {
return false;
}
}
dan gunakan setCellEditor:
JTable table = new JTable();
table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox()));