1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

NumberField não está funcionando

Estou tentando criar um TextField do JavaFX que só aceite números, o ponto e a vírgula. No caso da vírgula, ela será convertida para um ponto. Se for um ponto (ou vírgula), se o campo já tiver um ponto, ele não aparecerá, e, se não houver nada, aparecerá um "0."

Lembrando que tudo isso acontecerá se houver no máximo um dígito depois do número, já que é um campo para preços.

import javafx.event.EventHandler;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;

public class CampoPreco extends TextField {

    public CampoPreco() {
        super();
        setOnKeyPressed(new EventHandler<KeyEvent>() {

            @Override
            public void handle(KeyEvent event) {
                if(!getText().matches("\\d*\\.\\d{2}")) {
                    if(event.getCharacter() == "," || event.getCharacter() == ".") {
                        event.consume();
                        if(getText().equals("")) {
                            setText("0.");
                        } else if(!getText().matches("\\d*\\.")) {
                            setText(getText() + ".");
                        }
                    } else if(!"0123456789".contains(event.getCharacter()) && event.getCode() != KeyCode.BACK_SPACE) {
                        event.consume();
                    }
                } else {
                    event.consume();
                }
            }
        });
    }

    public CampoPreco(String arg0) {
        super(arg0);
        setOnKeyPressed(new EventHandler<KeyEvent>() {

            @Override
            public void handle(KeyEvent event) {
                if(!getText().matches("\\d*\\.\\d{2}")) {
                    if(event.getCharacter() == "," || event.getCharacter() == ".") {
                        event.consume();
                        if(getText().equals("")) {
                            setText("0.");
                        } else if(!getText().matches("\\d*\\.")) {
                            setText(getText() + ".");
                        }
                    } else if(!"0123456789".contains(event.getCharacter()) && event.getCode() != KeyCode.BACK_SPACE) {
                        event.consume();
                    }
                }
            }
        });
    }

}

Porém, esse CampoPreco não está bloqueando nenhuma ação (nem letra, nem se já houver um ponto e eu quiser colocar outro, etc.). O que está errado?

OBS: Já tentei fazer o que vi em outros tutoriais na internet, mas nenhum funcionou.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java javafx ou faça a sua própria pergunta.