TableModelListener nic nie słyszy

0

Witam,

Mam problem jak w temacie. Stworzyłem prosty TableModel który pobiera dane z obiektu ResulSet:

class TableModel extends AbstractTableModel{
        
        ResultSet rst = null;
        int rowsCount = 0;
        String[] header = {"ID", "NAZWA", "NUMER"};
        String[][] data = null;
        
        public TableModel(ResultSet rst){
            this.rst = rst;
            try{
                while(rst.next()){
                    rowsCount++;
                }
                data = new String[rowsCount][3];
                rst.first();
                rst.previous();
                int i = 0;
                while(rst.next()){
                    data[i][0] = rst.getString(1);
                    data[i][1] = rst.getString(2);
                    data[i][2] = rst.getString(3);
                    i++;
                }
            }catch(SQLException ex){
                ex.printStackTrace();
            }            
        }
        
        public int getColumnCount(){
            return header.length;
        }
                
        public int getRowCount(){
            return data.length;
        }
        
        public String getColumnName(int col){
            return header[col];
        }
        
        public Object getValueAt(int row, int col){
            return data[row][col];
        }
        
        public boolean isCellEditable(int row, int col){        
            if(col < 1){
                return false;
            }else{
                return true;
            }
        }
    }                

Następinie stworzyłem na jego podstawię tabelę i dodałem TableModelListener()

TableModel tbM = new TableModel(rst);
table = new  JTable(tbM);    
table.getModel().addTableModelListener(this);

Przysłoniłem metodę tableChanged()

public void tableChanged(TableModelEvent ev){
        int row = ev.getFirstRow();
        int column = ev.getColumn();
        TableModel model = (TableModel)ev.getSource();
        String columnName = model.getColumnName(column);
        Object data = model.getValueAt(row, column);
        
        System.out.println("Row:" + row + " Column:" + column);
    }

I nic... Miałem nadzieję, że Listener przechwyci zdarzenie polegające na zmianie danych w komórce JTable ale on po prostu nic nie słyszy. Bardzo proszę o wskazówkę co robię źle.

Pozdrawiam.

0

Zajrzyj do dokumentacji klasy AbstractTableModel, po zmianie danych musisz poinformować słuchaczy, metody: fireTableDataChamged() i podobne
Pozdrawiam

0

Dzięki,

W modelu wystarczy dodać metodę:

public void setValueAt(Object value, int row, int col) {
            data[row][col] = value;
            fireTableCellUpdated(row, col);
        }

...i wszystko działa!

Pozdrawiam

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