JFormattedTextField no NetBeans [Acho que resolvido]

8 respostas
Z

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.

8 Respostas

Z

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.

Z

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

R

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:

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("##.###.###/####-##");
    }
}
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:
txtDataIni = Formato.getData();
Tudo para evitar repetição de código.
J

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){}
Y

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:

L

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 !

M

obrigado pexoal

A

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!

Criado 18 de julho de 2007
Ultima resposta 23 de jun. de 2013
Respostas 8
Participantes 7