JFormattedTextField não repassa corretamente dados das máscaras para o modelo

Olá,

preciso acessar os dados de um JFormattedTextField a partir de seu modelo (uma implementação de javax.swing.text.Document). O problema é que as informações que ficam no modelo trazem os caracteres de formatação da máscara (por exemplo, pontos e barras em um CPF), mesmo que eu desabilite isto em MaskFormatter com o método setValueContainsLiteralCharacters(false).

Alguém sabe como seria possível que o MaskFormatter ou mesmo o JFormattedTextField repassassem o valor correto para o modelo?

Obrigado.

Você está usando getText() ou getValue() ? Tente este último.

Márcio

Marcio, acho que não me fiz entender. Criamos aqui uma estrutura para fazer, basicamente, o que os componentes chamados “conscientes de dados” fazem em ambientes RAD como Delphi ou Visual Basic. Porém, aqui os componentes não carregam seus dados de tabelas mas de objetos no padrão JavaBeans.

Nesta estrutura os dados são extraídos não dos componentes mas dos modelos subjacentes da estrutura MVC do Swing (o que inviabiliza o uso de JFormattedTextField.getText ou JFormattedTextField.getValue), que, no caso de um JFormattedTextField, é alguma instância de uma classe que implementa a interface javax.swing.text.Document. O problema é que o modelo não recebe o value, mas o text.

O problema é justamente esse: o modelo Document subjacente ao JFormattedTextField não recebe o valor como especificado na máscara, e sim o texto contendo a máscara, mesmo que se tenha solicitado ao formatador (MaskFormatter) que o valor resultante não contivesse a máscara. Isto me parece, ainda, um furo da modelagem MVC do Swing, já que formatação é atributo da visualização. O modelo deveria obter o valor correto, já processado.