/ / Как да направим JTable с възможност за редактиране - java, swing, jtable

Как да направите JTable не редактируем - java, swing, jtable

Как да си направя JTable без възможност за редактиране? Не искам моите потребители да могат да редактират стойностите в клетките, като щракнете двукратно върху тях.

Отговори:

18 за отговор № 1

Можете да използвате 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());

137 за отговор № 2

Можете да отмените метода 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);

36 за отговор № 3

просто добавете

table.setEnabled(false);

тя работи добре за мен.


23 за отговор № 4
table.setDefaultEditor(Object.class, null);

7 за отговор № 5

Ако създавате TableModel автоматично от набор от стойности (с "нов 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
}

Без редактори данните няма да могат да се редактират.


3 за отговор № 6

Използвах това и работи: много е проста и работи отлично.

JTable myTable = new JTable();
myTable.setEnabled(false);

2 за отговор № 7

създайте нов клас 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()));