@Alecxandrys

Как отредактировать ячейку в TabelModel?

День Добрый!
Есть указанная TableModel, однако в таблице созданной по ней невозможно изменить значения
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
import java.util.HashSet;
import java.util.Set;


class ConjunctionTableModel implements TableModel {
    private Set<TableModelListener> listeners = new HashSet<>();
    private int G1[][];

    ConjunctionTableModel(int G1[][])
    {
     this.G1=G1;
    }
    @Override
    public int getRowCount() {
        return G1.length;
    }

    @Override
    public int getColumnCount() {
        return G1.length + 1;
    }

    @Override
    public String getColumnName(int columnIndex) {
        if (columnIndex == 0) return "";
        return "x" + columnIndex;
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        if (columnIndex == 0) return String.class;
        return int.class;
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return columnIndex != 0;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        if (columnIndex == 0) {
            return "x" + (rowIndex + 1);
        }

        return G1[rowIndex][columnIndex - 1];
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        if (!(aValue instanceof String)) {
            if ((int) aValue == 0 || (int) aValue == 1) {
                G1[rowIndex][columnIndex - 1] = (int) aValue;
            }
        }

    }

    @Override
    public void addTableModelListener(TableModelListener l) {
        listeners.add(l);
    }

    @Override
    public void removeTableModelListener(TableModelListener l) {
        listeners.remove(l);
    }
}


Таблица создана посредством следующего
JTable table = new JTable(new ConjunctionTableModel(G1)); 
JScrollPane scrollPane = new JScrollPane(table);

где G1-матрица интовых значении, допустимы только 0 и 1.

Как исправить код, чтобы можно было редактировать значения в таблице?
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
@Alecxandrys Автор вопроса
И все элементарное просто
@Override
    public Class<?> getColumnClass(int columnIndex) {
        if (columnIndex == 0) return String.class;
        return Integer.class;
    }

Использовать место примитива int обертку Integer оказалось достаточно и все заработало.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы