TableCellEditor com JTextField para valores dentro da JTable?

Salve galera.

Adicionei um TableCellEditor para criar um JTextField na JTable para valores de uma classe que uso em meus projetos, esta funcionando, mas eu preciso de mais algumas coisas.

1 - Ao dar um “Enter” na coluna onde esta o JTextField seja aberto a edicao sem precisar clicar com o mouse.
2 - Depois de inserir o valor R$ e teclar o “Enter” novamente seja dado o setValueAt(column) e o foco seja dado na proxima coluna para inserir novos valores.
3 - Tenho um JTextField com o label “Total”, quero ir calculando os valores inseridos apos o item2 ser executado e ir exibindo as somas dos valores nesse JTextField.

aqui como fiz

// meu Bean(POJO)
public class TipoPagto {
    private Long idPagto;
    private String tipo;
    private BigDecimal valor;
//sets e gets


//aqui meu TableModel
public class TipoPagtoTableModel extends AbstractTableModel{
    private List<TipoPagto> listaTipoPagto;
    private String[] colunas = {"Id","Tipo Pagto.","Valor(R$)"};
    
    public TipoPagtoTableModel(){
        this.listaTipoPagto = new ArrayList<TipoPagto>();
    }
    
    public TipoPagtoTableModel(List<TipoPagto> lista){
        this();
        this.listaTipoPagto.addAll(lista);
    }
    
    @Override
    public int getRowCount() {
        return this.listaTipoPagto.size();
    }

    @Override
    public int getColumnCount() {
        return this.colunas.length;
    }
    
    public String getColumnName(int column){
        //nome da coluna
        if(colunas[column] == "Id"){
            return "Id";
        }else if(colunas[column] == "Tipo Pagto."){
            return "Tipo Pagto.";
        }else if(colunas[column] == "Valor(R$)"){
            return "Valor(R$)";
        }
        return new String();
    }
    
     public Class getColumnClass(int column){
         if(colunas[column] == "Id"){
             return String.class;
         }else if(colunas[column] == "Tipo Pagto."){
            return String.class;
        }else if(colunas[column] == "Valor(R$)"){
            return BigDecimal.class;
        }
        return String.class;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {        
        TipoPagto tp = this.listaTipoPagto.get(rowIndex);        
        switch(columnIndex){
            case 0: return new FormataCodigos().retornaCodigoFormatado(tp.getIdPagto());
            case 1: return tp.getTipo(); 
            case 2: return tp.getValor();
            default: return new String();
        }
    }
    
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        listaTipoPagto.get(rowIndex).setValor(new BigDecimal(aValue.toString()));
        fireTableRowsUpdated(rowIndex, columnIndex);
    }
    
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        if(columnIndex == 2){
            return true;
        }else{
            return false;
        }	
    }
    

    public Boolean deleteAll(){
        this.listaTipoPagto.clear();
        fireTableDataChanged();
        return true;
    }
    
    public boolean removeRow(int line){   
         this.listaTipoPagto.remove(line); 
         fireTableDataChanged();
         return true;   
   }
}


//aqui meu TableCellEditor
public class TipoPagtoTableCellEditor extends AbstractCellEditor implements TableCellEditor {
    private JTextField txtField;
    
    public TipoPagtoTableCellEditor(){
        txtField = new JMoneyField(15);
    }

    @Override
    public Object getCellEditorValue() {
        return txtField.getText();
    }

    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        return txtField;
    }
}



//aqui como uso no JFrame
public void getTiposPagamento(){
        List<TipoPagto> lista = new TipoPagtoDAO().getFormaPagto();
        model = new TipoPagtoTableModel(lista);
        tabelaTipoPagto.setModel(model);
        TableColumn col = tabelaTipoPagto.getColumnModel().getColumn(2);
        col.setCellEditor(new TipoPagtoTableCellEditor());
      
    }

Como fazer isso ?

Alguem ??