JFormattedTextField no NetBeans [Acho que resolvido]

Bom dia Colegas !

Não estou conseguindo setar o formato de um JFormattedTextField para data ("##/##/####").

O que fiz foi colocar a propriedade columns = 8 e colocar na opção “Código pós-criação:” =

textoF = new JFormattedTextField(fmtData);

Bom o código que resulto foi esse:
Construtor da classe:

    public CadastroCliente() {
        try {
            MaskFormatter fmtData;            
            fmtData = new MaskFormatter("##/##/####");
        } catch (ParseException ex) {
            ex.printStackTrace();
        }
        initComponents();

initComponents gerado pelo NB:

private void initComponents() {
        textoF = new javax.swing.JFormattedTextField();
        textoF.setColumns(8);
        textoF = new JFormattedTextField(fmtData);
        textoF2.setPreferredSize(new java.awt.Dimension(120, 20));
}

No entanto, na tela aparece um TextField sem qualquer formatação.

Já tentei retirar tudo das propriedades e colocar o código no construtor, depois da chamada ao método initComponents, mas também não funcionou…

Alguem sabe a forma correta de utilizar esse objeto no NB ?

Outra coisa… tem como fazer com que o NB deixe alterar o código gerado ? Ter que entrar na propriedades toda hora da um trabalho…

Esqueci de dizer que fmtData esta declarada assim:

public class CadastroCliente extends javax.swing.JInternalFrame {    
private MaskFormatter fmtData;                

Obrigado a todos.

Boa noite Colegas !

Bom… se interessar a alguém, a maneira que encontrei foi:

Nas propriedades do JFormattedTextField setar, Columns = 8

Ainda na Propriedades, na opção Código, setar:

Código pré-criação:

try {     ftmData = new MaskFormatter("##/##/####"); } catch (ParseException e) {     e.printStackTrace(); }

Código pós-criação:

this.textoF3 = new JFormattedTextField(ftmData);

Obs.:
-ftmData é declarada como uma variavel com visibilidade da classe.
(uma das vantagens é que com isso posso utilizá-la para qualquer outro JFormattedTextField da minha tela)

-textoF3 é o meu objeto JFormattedTextField.

Um abraço a todos.

Boa noite colegas !

As maneiras que encontrei:

  1. Em propriedades:

Setar propriedade FormatterFactory = new DefaultFormatterFactory(ftmData, ftmData);

onde: ftmData = new MaskFormatter("##/##/####");

variação: criar um método que retorne DefaultFormatterFactory e utilizar colocando na opção Código do usuário (nesse caso não colocar “;” no final)

  1. Em Propriedades >> Código:

Setar Código pós-criação para:

this.textoF3 = new JFormattedTextField(ftmData);

onde: textoF3 é o próprio JFormattedTextField e ftmData é um objeto MaskFormatter("##/##/####");
Lembrar de inicializar ftmData.

  1. No construtor:
    Após o initComponent(); colocar
textoF5.setFormatterFactory(new DefaultFormatterFactory(ftmData, ftmData));

onde: textoF5 é o JFormattedTextField e ftmData é o objeto MaskFormatter já iniciailizado.

[]s

Zeed01, só para especificar meu método.
Como formatações de campos é algo muito constante em um sistema desktop eu crio uma classe “Formato” que me devolve um JFormattedTextField para as formatações comuns. Segue abaixo um pedaço:

[code]public class Formato {

public static JFormattedTextField getFormatado(String formato) {
    JFormattedTextField campoFormatado = null;
    MaskFormatter format = new MaskFormatter();
       
    format.setPlaceholderCharacter('_');
    format.setValueContainsLiteralCharacters(false);
    
    try {
        format.setMask(formato);
        campoFormatado = new JFormattedTextField(format);
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
    return campoFormatado;
}

public static JFormattedTextField getTelefone() {
    return getFormatado("(##) ####-####");
}

public static JFormattedTextField getCNPJ() {
    return getFormatado("##.###.###/####-##");
}

}[/code]
Quando vou atribuir o formato à algum campo (uso JTextFields ao invés de JFormattedTextField) troco o código de criação dele para algo como:

Tudo para evitar repetição de código.

Pessoal estou com uma dúvida semelhante.
Preciso através de um jFormattedTextField formatar a data fornecida.
Estou usando banco postgresql é o campo no banco é do tipo time stamp without time zone.

No meu caso estou usando o NetBeans e já coloquei o campo jFormattedTextField e começei a fazer o seguinte código no evento ActionPerformed do botão, só que não tenho noção como passar esse formato para data e
outra coisa preciso pegar esta data informada e coloca-la depois dentro de uma select.
Quardo este data num Data?

MaskFormatter ftmData;
try{
ftmData = new MaskFormatter("##/##/####");
//? jFormattedTextField_data …?
}
catch(Exception e){}

Eu formatei do jeito mais facil possivel, tem muito topico explicando com codigo, mas são muitos e as vezes confunde, eu fiz pelo metodo “visual” mesmo, coloquei um JFormattedTextField e depois em propriedades > FormatterFactory > Mascara > personalizado. pronto utilizei a formatação para data (##/##/####) e ae o campo fica formatado já para :smiley:

Sei que o topico eh meio antigo, mas para nao criar outro resolvi usar este mesmo.

raci0nal, apos fazer o que vc fez, como eu posso atualizar meu campo para que ele mostre o texto formatado ?

No meu, eu tive que fazer o seguinte para funcionar:

private void jtfDataEnvioFocusLost(java.awt.event.FocusEvent evt) { // TODO add your handling code here: String pega = jtfDataEnvio.getText(); jtfDataEnvio = formataData(); jtfDataEnvio.setText(pega); }

dando um print(jtfDataEnvio.getText()); ele me mostra corretamente formatado, mas no campo na tela (SWING) nao !

Como eu faço isso ?

E outra coisa, esta bom o jeito que eu fiz ? Apos o campo perder o foco ?

Abraço e obrigado !

obrigado pexoal

raci0nal

ufa!! Sua solução foi a única que me ajudou depois de três dias tentando pegar o contéudo de jFormattedTextFiedl que só retornava vazio. Mudei para JtextField mais a sua solução e ficou perfeito. Muito obrigado!