JFormattedTextField que aceite qualquer número

5 respostas
EugenioMonteiro

Preciso fazer um jFormattedTextField dinâmico, ou seja, dependo do tipo de busca que o usuário escolher ele passará a aceitar aquele tipo de valor. Por exemplo:
O usuário escolhe busca por data, então eu atribuo a máscara (##/##/####) ao campo.

Mas quando o usuário escolhe busca por código eu não consigo fazer com que o JFormattedTextField aceite somente números com qualquer quantidade de dígitos. Como eu faço para fazer isso dinamicamente? Eu já encontrei várias respostas, mas nenhuma funcionou.

5 Respostas

WendersonLP

Só é você criar os tipos de máscaras que serão necessários para você, ou seja, os tipos diferentes de opções
que você disponhe para o usuário, no seu caso um tipo de máscara para data e outro por código.

EugenioMonteiro

Tudo bem, eu fiz isso mas não funcionou como eu queria. Eu criei uma máscara do tipo ####, porém se o usuário quiser o número 2 terá que digitar 0002. Criei o outra máscara e defini como caracteres válidos os digitos “[telefone removido]”, porém o jFormattedTextField não aceitou nenhuma tecla digitada pelo usuário.

lina

Oi,

Acho que você deverá utilizar um método chamado setValidCharacters() da classe MaskFormatter.

Tchauzin!

EugenioMonteiro

Eu usei o setValidCharacters(“[telefone removido]”), porém o jFormattedTextField passou a não aceitar nenhum caractere.

lina

Oi,

O correto mesmo seria utilizar o PlainDocument do campo de texto.

Poderá ser feito assim:

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

    public class Doc extends PlainDocument {
        @Override
        public void insertString(int offset, String str, AttributeSet attr) 
        throws BadLocationException {
          super.insertString(offset, str.replaceAll("[^0-9]",""), attr);
        }
    }

Ou assim:

class Doc extends PlainDocument{ 
        public void insertString(int offs, String str, AttributeSet a) throws BadLocationException{ 
            //percorre a String inserida...
            for(int i=0;i<str.length();i++){ 
                //isDigit() verifica se é um numero, se não for ignora...
                if(Character.isDigit(str.charAt(i))){ 
                    //se for insere no documento      
                    super.insertString(offs, Character.toString(str.charAt(i)), a); 
                } 
            } 
        } 
    }

Exemplo de utilização:

public class Main9 extends JFrame{
    private JTextField field = new JTextField(20);

    public Main9() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
       
        field.setDocument(new Doc());
        
        getContentPane().add(field);

        pack();
        setVisible(true);
    }
    
    class Doc extends PlainDocument{ 
        public void insertString(int offs, String str, AttributeSet a) throws BadLocationException{ 
            //percorre a String inserida...
            for(int i=0;i<str.length();i++){ 
                //isDigit() verifica se é um numero, se não for ignora...
                if(Character.isDigit(str.charAt(i))){ 
                    //se for insere no documento      
                    super.insertString(offs, Character.toString(str.charAt(i)), a); 
                } 
            } 
        } 
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new Main9();
    }
}

Tchauzin!

Criado 2 de novembro de 2009
Ultima resposta 3 de nov. de 2009
Respostas 5
Participantes 3