[Resolvido] Problema no método dataChanged da Interface TableModelListener

Boa noite pessoal,

Estou criando um AbstractTableModel para preencher uma JTable, e preciso pegar alterações na tabela através do método dataChanged, mas não estou conseguindo, simplesmente não da certo. Segue o código abaixo:

package teste.table.model.listener;

public class Funcionario {

    private int id;
    private String nome;
    private int idade;
    private double salario;


    public Funcionario(int id, String nome, int idade, double salario) {
        this.id = id;
        this.nome = nome;
        this.idade = idade;
        this.salario = salario;
    }

    public Funcionario() {
        this.nome = null;
        this.idade = 0;
        this.salario = 0.0;
    }

    
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getIdade() {
        return idade;
    }

    public void setIdade(int idade) {
        this.idade = idade;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public double getSalario() {
        return salario;
    }

    public void setSalario(double salario) {
        this.salario = salario;
    }
}
package teste.table.model.listener;

import java.util.ArrayList;
import java.util.List;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;

public class FuncionarioTableModel extends AbstractTableModel {

    //constantes referentes as colunas da tabela
    private final int COL_ID = 0;
    private final int COL_NOME = 1;
    private final int COL_IDADE = 2;
    private final int COL_SALARIO = 3;
    private List<Funcionario> funcionarios = new ArrayList<Funcionario>();
    Funcionario f1 = new Funcionario(1, "Teste", 22, 3855);

    public FuncionarioTableModel() {
        funcionarios.add(f1);
    }
    
    @Override
    public int getColumnCount() {
        return 4;
    }

    @Override
    public String getColumnName(int col) {
        switch (col) {
            case 0:
                return "ID";
            case 1:
                return "Nome";
            case 2:
                return "Idade";
            case 3:
                return "Salario";
            default:
                return null;
        }
    }

    @Override
    public int getRowCount() {
        return funcionarios != null
                ? funcionarios.size()
                : 0;
    }

    @Override
    public Object getValueAt(int lin, int col) {
        if (funcionarios != null && lin >= 0 && lin < funcionarios.size()) {
            Funcionario f = funcionarios.get(lin);
            switch (col) {
                case 0:
                    return f.getId();
                case 1:
                    return f.getNome();
                case 2:
                    return f.getIdade();
                case 3:
                    return f.getSalario();
            }
        }
        return null;
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        if (columnIndex == COL_NOME) {
            funcionarios.get(rowIndex).setNome((String) aValue);
        } else if (columnIndex == COL_IDADE) {
            funcionarios.get(rowIndex).setIdade(Integer.parseInt(String.valueOf(aValue)));
        }
        if (columnIndex == COL_SALARIO) {
            funcionarios.get(rowIndex).setSalario(Double.parseDouble(String.valueOf(aValue)));
        }
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        if (columnIndex != 0) {
            return true;
        } else {
            return false;
        }
    }
    
}
package teste.table.model.listener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;

public class Teste implements TableModelListener{

    FuncionarioTableModel modelo = new FuncionarioTableModel();
    JFrame janela = new JFrame();
    JPanel painel = new JPanel();
    JTable tabela = new JTable();

    public void initComponents(){
        
        tabela.setModel(modelo);
        painel.add(tabela);
        janela.add(painel);
        
        tabela.getModel().addTableModelListener(this);
        
        janela.setSize(300, 100);
        janela.setVisible(true);
    }
    
    public Teste() {
        this.initComponents();
    }
    
    public static void main(String[] args) {
        Teste t = new Teste();
    }

    @Override
    public void tableChanged(TableModelEvent e) {
        System.out.println("funcionando");
    }
}

Queria pegar algumas informações sobre as alterações feitas nos dados da tabela (preciso disso sem o setValueat da classe modelo).
Quem puder dar uma luz, fico grato.

Abração.

PS: não da erro, ao alterar o valor de algum campo da tabela, simplesmente não da a saida no console com o dataChanged.

Grato.

Depois de analisar o código, percebi que me esqueci de chamar o método fireTableCellUpdated(rowIndex, columnIndex) no método setValueAt da classe que implementa a AbstractTableModel.

Tópico resolvido.

Abraços.