Utilizando JTextField Personalizado em Célula de um JTable

Olá amigos,

estou realizando o preenchimento de alguns dados diretamente em uma tabela, porém estou com o seguinte problema:

Nas colunas 5 e 6 cujo JTextField é simplesmente uma classe de herança que aplica as propriedades de um TextField monetário (TextFieldMoedaReal), ao clicar com o mouse sobre a célula, as propriedades do TextFieldMoedaReal são devidamente executadas, porém, caso eu acesse a célula apenas pelo teclado, as propriedades não são executadas.

Segue abaixo os devidos códigos para que possam me ajudar:

Criação do Model da tabela.

 /**
     * Seta e captura o modelo da tabela de produtos
     */
    public DefaultTableModel getModelTabelaProdutos() {

        TableColumn coluna1 = frame.tabelaProdutos.getColumnModel().getColumn(0);
        TableColumn coluna2 = frame.tabelaProdutos.getColumnModel().getColumn(1);
        TableColumn coluna3 = frame.tabelaProdutos.getColumnModel().getColumn(2);
        TableColumn coluna4 = frame.tabelaProdutos.getColumnModel().getColumn(3);
        TableColumn coluna5 = frame.tabelaProdutos.getColumnModel().getColumn(4);
        TableColumn coluna6 = frame.tabelaProdutos.getColumnModel().getColumn(5);

        /**Dimensiona as colunas na tabela**/
        coluna1.setPreferredWidth(150);
        coluna2.setPreferredWidth(50);
        coluna3.setPreferredWidth(50);
        coluna4.setPreferredWidth(50);
        coluna5.setPreferredWidth(50);
        coluna6.setPreferredWidth(70);

        /*Preenche a coluna 1 com um combobox de produtos*/
        String[] values = AbstractDAO.inicializaStringsComboBox(null, "produto");
        coluna1.setCellEditor(new MyComboBoxEditor(values));
        coluna1.setCellRenderer(new MyComboBoxRenderer(values));
        
        //TextFieldMoedaReal textMoeda = new TextFieldMoedaReal();
        //textMoeda.setNumber(BigDecimal.ZERO);

        /*Aplica máscaras para as respectivas células da tabela*/
        coluna2.setCellEditor(new DefaultCellEditor(new javax.swing.JFormattedTextField(new MascarasJTextField().inserirMascara("######"))));
        coluna3.setCellEditor(new DefaultCellEditor(new javax.swing.JFormattedTextField(new MascarasJTextField().inserirMascara("######"))));
        coluna4.setCellEditor(new DefaultCellEditor(new javax.swing.JFormattedTextField(new MascarasJTextField().inserirMascara("######"))));
        coluna5.setCellEditor(new DefaultCellEditor(new TextFieldMoedaReal()));
        coluna6.setCellEditor(new DefaultCellEditor(new TextFieldMoedaReal()));
        
                
        /*Aplica o modelo*/
        DefaultTableModel modelo = (DefaultTableModel) frame.tabelaProdutos.getModel();
        modelo.setNumRows(0);

        return modelo;
    }

JFieldMoedaReal. Esta classe eu peguei de algum amigo desses fóruns na internet. Talvez tenha sido aqui mesmo.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package gui.utils;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.math.BigDecimal;
import javax.swing.JTextField;

/*Classe desenvolvida por Renzo Nuccitelli
* para fazer validação de valores monetários
* em Real
*/
public class TextFieldMoedaReal extends JTextField implements KeyListener {
    private StringBuilder lastValidNumber;


    /**
     * Aceita um BigDecimal com escala 2.
     * Outras escalas não são serão aceitas
     *
     * @param BigDecimal
     */

    public void setNumber(BigDecimal decimal){
        System.out.println("escala: "+decimal.scale());
        if(decimal.scale()==2){
            lastValidNumber=new StringBuilder(decimal.unscaledValue().toString());
            super.setText(getRealFormat());
        }
    }
    /**Retorna um BigDecimal com o valor encontrando no campo
     * e com escala igual a 2
     *
     * @return BigDecimal
     */
    public BigDecimal getNumber(){
        BigDecimal number;
        if(lastValidNumber.length()==0)
            number=new BigDecimal("0");
        else
            number=new BigDecimal(lastValidNumber.toString());
        number.setScale(2);
        return number.divide(new BigDecimal(100));
    }

    /**Aceita valor em centavos.
     * O valor não deve possuir ponto ou vírgula
     *
     * @param String
     */
    @Override
    public void setText(String number){
        if(isNumber(number))
            lastValidNumber=new StringBuilder(number);
        super.setText(getRealFormat());

    }

    private boolean isNumber(String number){
        for(char c: number.toCharArray()){
            if(!Character.isDigit(c))
                return false;
        }
        return true;
    }
    public TextFieldMoedaReal() {
        super();
        this.setCaretPosition(this.getText().length());
        this.addKeyListener(this);
        lastValidNumber=new StringBuilder();
        super.setText(getRealFormat());
    }

    @Override
    public void keyPressed(KeyEvent e) {

    }

    @Override
    public void keyReleased(KeyEvent e) {
        if(Character.isDigit(e.getKeyChar())){
            lastValidNumber.append(e.getKeyChar());
        }
        else if(e.getKeyCode()==KeyEvent.VK_BACK_SPACE){
            if(lastValidNumber.length()>0){
                lastValidNumber.deleteCharAt(lastValidNumber.length()-1);
            }
        }

        this.setText(getRealFormat());

    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

    private String getRealFormat(){
        if(lastValidNumber.length()==0)
            return "0,00";
        else if(lastValidNumber.length()==1)
            return "0,0"+lastValidNumber;
        else if(lastValidNumber.length()==2)
            return "0,"+lastValidNumber;
        else
            return buildPrefixSeparateWithDots()+lastValidNumber.substring(lastValidNumber.length()-2);
    }

    private String buildPrefixSeparateWithDots(){
        StringBuilder builder=new StringBuilder();
        for(int index=0;index<lastValidNumber.length()-2;++index){
            builder.append(lastValidNumber.charAt(index));
            if((lastValidNumber.length()-index)%3==0&&lastValidNumber.length()-index>5)
                builder.append(".");
        }
        builder.append(',');
        return builder.toString();
    }

}