Ignorar Tecla Javafx 2.2 [RESOLVIDO]

3 respostas
V

Olá Pessoal, todos bem?

Estou desenvolvendo uma aplicação com javafx e preciso criar uma mascara para o cpf.
Estou implementando, já que não encontrei pronto.
Minha duvida é o seguinte, tem com ao capturar um KeyEvent, eu ignorar/desfazer o evendo de forma que ele não tenha ação sobre o
TextField, caso não seja um numero?

Minha solução atual remove os caracteres que não não numeros na hora que são inseridos, mas isso é ruim pra usabilidade, já que
a letra aparece de some imediatamente.

3 Respostas

douglaskd

seria mais ou menos isso ?

TextField field = new TextField() {
    @Override public void replaceText(int start, int end, String text) {
        // If the replaced text would end up being invalid, then simply
        // ignore this call!
        if (!text.matches("[0-9]")) {
            super.replaceText(start, end, text);
        }
    }

    @Override public void replaceSelection(String text) {
        if (!text.matches("[0-9]")) {
            super.replaceSelection(text);
        }
    }
};

referência: http://fxexperience.com/2012/02/restricting-input-on-a-textfield/

alterei para somente numeros....

testa ai

V

Olá, primeiramente obrigado por me ajudar.

Eu vi isso aí nas minhas pesquisas. Porém, eu uso FXML, então sobrescrever não é uma boa ideia.
Eu não queria filtrar assim, queria ignorar a tecla.

V

Consegui solucionar o problema.

O segredo esta nos EventHandlers, é possivel adicionar filtros neles para as mais variada situações (aprendi isso hoje)
Vou mostrar meu exemplo de codigo que soluciona o problema:

EventHandler<KeyEvent> handler = new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent t) {

                if (!t.getCharacter().matches("\\d")) {
                    //se atender a condição o envento vai ser ignorado
                    t.consume();

                }

            }
        };

        //basta adcionar o handler no textfield e pronto.
        textCPF.addEventFilter(KeyEvent.KEY_TYPED, handler);
Criado 22 de fevereiro de 2013
Ultima resposta 22 de fev. de 2013
Respostas 3
Participantes 2