De DefaultTableModel para AbstractTableModel

Pessoal, estou com um JFrame que tem uma tabela, e dentro dessa tabela é listado os produtos que eu possuo no meu banco de dados (MySQL), porem estou usando DefaltTableModel e queria passar para AbstractTableModel. Alguem poderia me ajudar?

Essa aqui é uma parte do código da minha TelaProduto:

public class TelaProduto extends javax.swing.JInternalFrame {    
Connection connection = null;
PreparedStatement pst = null;
ResultSet rs = null;    
    
public TelaProduto() {  
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    initComponents();
    connection = ModuloConexao.connection(); 
    txtProId.setVisible(false);
}

private void adicionar() {
    if ((txtProProduto.getText().isEmpty())
            || (txtProPreco.getText().isEmpty()) || (txtProQuantidade.getText().isEmpty())
            || (jDatProCompra.getDate() == null || (jDatProVencimento.getDate() == null))) {
        JOptionPane.showMessageDialog(null, "Preencha todos os campos obrigatórios.");
    } else {
        String sql = "insert into tbprodutos(produto,preco,quantidade,categoria,compra,validade) values(?,?,?,?,?,?)";
        try {
            pst = connection.prepareStatement(sql);
            pst.setString(1, txtProProduto.getText());
            pst.setString(2, txtProPreco.getValue().toString());
            pst.setString(3, txtProQuantidade.getText());
            pst.setString(4, cboProCategoria.getSelectedItem().toString());
            pst.setDate(5, new java.sql.Date(jDatProCompra.getDate().getTime()));
            pst.setDate(6, new java.sql.Date(jDatProVencimento.getDate().getTime()));
            
            int adicionado = pst.executeUpdate();
            if (adicionado > 0) {
                JOptionPane.showMessageDialog(null, "Produto cadastrado com sucesso.");
                txtProProduto.setText(null);
                txtProPreco.setText(null);
                txtProQuantidade.setText(null);
                cboProCategoria.setSelectedItem(null);
                jDatProCompra.setDate(null);
                jDatProVencimento.setDate(null);
                pesquisar_produto();

            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
        
    }
}

Eu fiz outra classe, extendendo abstractTableModel:

import java.util.List;
import javax.swing.table.AbstractTableModel;

public class ProdutoTableModel extends AbstractTableModel {

private static final int COL_PRODUTO = 0;
private static final int COL_PRECO = 1;
private static final int COL_QUANTIDADE = 2;
private static final int COL_CATEGORIA = 3;
private static final int COL_COMPRA = 4;
private static final int COL_VALIDADE = 5;   

private List<TelaProduto> descricao;

public ProdutoTableModel(List<TelaProduto> descricao){
    this.descricao = descricao;
}

@Override
public int getRowCount() {
    return descricao.size();
}

@Override
public int getColumnCount() {
    return 6;
}
    
@Override
public Object getValueAt(int i, int i1) {
    TelaProduto produto = descricao.get(rowIndex);
    if (columIndex == COL_PRODUTO){
        return produto.getId();
    }
    return null;
}

}

Estou no caminho certo ?

Obrigado!

Se o DTM fosse o único problema aí, amigo…