Zmienianie danych w danych komórkach JTable

0

Hej,

Pojawił się kolejny problem do rozwiązania na horyzoncie :) Wydaje się banalny, ale... Tym razem chodzi o zmienianie danych w dodanym już wierszu. Zmiana danych zachodzi z poziomu "kodu", czyli np. przy akcji klawisza. Korzystam z customowego AbstractTableModel'u. Myślałem o przykryciu metody setValueAt, ale nie wiem za bardzo jak... Próbowałem już bawić się rozwinięciami fireTable itd, ale do tej pory bez skutku ;/

To przykładowa tabelka:

Problem.jpg

A to jej model:

public class Console_TableModel extends AbstractTableModel {

     private List<String> columnNames = new ArrayList<String>();
     private List<List> data = new ArrayList();
     
     Console_TableModel() {
          columnNames.add("Action");
          columnNames.add("Count");
          columnNames.add("Total");
          columnNames.add("X");
          columnNames.add("Y");
          columnNames.add("Quarter");
          columnNames.add("Answer");
          columnNames.add("T (ms)");
     }
     
     public void addRow(List rowData) {
          data.add(rowData);
          fireTableRowsInserted(data.size() - 1, data.size() - 1);
     }
     
     public void insertRow(int index, List rowData) {
          data.add(0, rowData);
          fireTableRowsInserted(data.size() - 1, data.size() - 1);
     }
     
     public int getColumnCount() {
          return columnNames.size();
     }

     public int getRowCount() {
          return data.size();
     }

     public String getColumnName(int col) {
          try {
               return columnNames.get(col);
          } catch (Exception e) {
               return null;
          }
     }
     
     public Object getValueAt(int row, int col) {
          return data.get(row).get(col);
     }
     
     
     public boolean isCellEditable(int row, int col) {
          return false;
     }
     
     public Class getColumnClass(int c) {
          return getValueAt(0, c).getClass();
     }     
}

Będę wdzięczny za podpowiedzi.

Pozdrawiam!

1

Wybaczcie za post pod postem, ale znalazłem proste rozwiązanie (gdy odszedłem od kompa O.O) i chciałbym się nim podzielić :) To czego nie zrobiłem, a co później robiłem źle, to niepoprawne przykrywanie metody modelu setValueAt(). Przykładowa prawidłowa i przetestowana implementacja tej metody wygląda tak:

@Override
public void setValueAt(Object value, int row, int column) {
     List rowValues = data.get(row);
     rowValues.set(column, value);
     fireTableCellUpdated(row, column);
}

Później już tylko proste wywołanie:

MyClass.myTableModel.setValueAt("YES", 0, 6);
MyClass.myTable.setModel(MyClass.myTableModel);
MyClass.myTable.repaint();

I voila. Gotowe :) Czas na redbulla.

Pozdrawiam ciepło!

1 użytkowników online, w tym zalogowanych: 0, gości: 1