Wie mache ich eine JTable
nicht bearbeitbare? Ich möchte nicht, dass meine Benutzer die Werte in Zellen durch Doppelklicken bearbeiten können.
Wie mache ich eine JTable
nicht bearbeitbare? Ich möchte nicht, dass meine Benutzer die Werte in Zellen durch Doppelklicken bearbeiten können.
Antworten:
Sie können eine verwenden TableModel
.
Definieren Sie eine Klasse wie folgt:
public class MyModel extends AbstractTableModel{
//not necessary
}
tatsächlich isCellEditable()
ist false
standardmäßig , so dass Sie es weglassen kann. (Siehe: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )
Dann verwenden Sie die setModel()
Methode Ihres JTable
.
JTable myTable = new JTable();
myTable.setModel(new MyModel());
public void
Methode kann keinen Booleschen Wert zurückgeben.
isCellEditable
Sie können die Methode isCellEditable überschreiben und wie gewünscht implementieren:
//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
table.setModel(tableModel);
oder
//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);
Beachten Sie, ob Ihre JTable verschwindet
Wenn Ihr JTable
verschwindet, wenn Sie dies verwenden, ist es höchstwahrscheinlich, weil Sie DefaultTableModel(Object[][] data, Object[] columnNames)
stattdessen den Konstruktor verwenden müssen.
//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);
einfach hinzufügen
table.setEnabled(false);
es funktioniert gut für mich.
Wenn Sie das TableModel automatisch aus einer Reihe von Werten erstellen (mit "new JTable (Vector, Vector)"), ist es möglicherweise einfacher, Editoren aus Spalten zu entfernen:
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
}
Ohne Editoren können Daten nicht bearbeitet werden.
new JTable(Vector, Vector)
und für mich gearbeitet. Ich brauche keinen Redakteur in keiner Zelle, also hast du meine Stimme.
Ich habe das benutzt und es hat funktioniert: Es ist sehr einfach und funktioniert gut.
JTable myTable = new JTable();
myTable.setEnabled(false);
Erstellen Sie eine neue DefaultCellEditor-Klasse:
public static class Editor_name extends DefaultCellEditor {
public Editor_name(JCheckBox checkBox) {
super(checkBox);
}
@Override
public boolean isCellEditable(EventObject anEvent) {
return false;
}
}
und benutze setCellEditor:
JTable table = new JTable();
table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox()));