MaskTextField para JavaFX

Estou desenvolvendo um software em JavaFX, e essa é a primeira vez que utilizo essa tecnologia(Também ainda não conheço todas as suas ferramentas de fato). De começo foi amor à primeira vista, ainda mais com a arquitetura de FXML editados no JavaFX SceneBuilder e um Controller.

Porém, nem tudo é perfeito, e num determinado momento precisei de máscaras nos Text Fields, o que não é implementado nativamente. Pesquisa daqui, pesquisa lá, não achei nada que realmente me agradasse, então coloquei a mão na massa e criei um MaskTextField.

A classe está em: https://github.com/davidaug/masktextfield

Recentemente fiz um vídeo para ajudar um pouco: https://youtu.be/P2kBxpLkDZc

Como Adicionar no seu Projeto:

  1. Adicione a classe MaskTextField.java no seu projeto
  2. Importe no seu FXML a Classe MaskTextField,
    exemplo: <?import util.MaskTextField ?>

Como utilizar:

  1. Crie uma instância classe(Ou coloque no FXML)
  2. Use a função void setMask(String mask) para criar uma máscara
  3. Com os Caracteres abaixo, altere a máscara [Ex: object.setMask(“XXXXX”)]

 Caracteres da máscara:

* = aceita qualquer caracter

A = somente alfanuméricos

N = somente números

L = somente letras

U = somente letras maiúsculas

l = somente letras minúsculas

S = qualquer caracter menos espaço

P = somente letras e pontos

M = letras, números e pontos

! = repetições infinitas

 

Exemplos:

String mask = “N!.N!”
Aceita somente números separados por um número, Ex: 1.1 , 111.111 , 123124.1 12312.00

String mask = “NN.NN”
Aceita apenas dois números antes e depois de um ponto Ex: 11.11 , 33.33, 13.30

String mask = “*U”
Aceita qualquer caracter e uma letra maiúscula  Ex: /L , L , [space]L

String mask = “Ul!”
Aceita uma letra maiúscula e uma Sequência de letras minúsculas Ex: David, Augusto

String mask = “M!@M!.P!”
Um e-mail Ex: davidaug23.7@gmail.com , themail@maildomain.co.uk

8 thoughts on “MaskTextField para JavaFX

  1. Victor

    Boa noite. Depois de muitas pesquisas encontrei um link que me deixou aqui.
    Achei bem interessante e tentei utilizar, mas não entendi muito bem, pois o “Como utilizar” me deixou confuso com seus “Exemplos”.
    Instanciei : MaskTextField maskT = new MaskTextField();
    Criei um Void e tentei utilizar os exemplos para ver como funcionava, mas não está dando muito certo.
    Void:
    public void setMask(String mask) { txtfUsuTelefones.setMask(“*U”); }

    Acho que não entendi muito bem como utilizar, gostaria de adicionar uma mascara bem simples, que apenas dividisse um telefone no meio, exemplo: Usuário digita 32323232 e no TextField ficasse automaticamente: 3232-3232.
    Poderia me ajudar?
    Valeu, muito obrigado!!!

    Reply
  2. Rodrigo

    Caro David vi seu vídeo e deu pra entender melhor o funcionamento da classe e máscara. Mas ainda fiquei com uma dúvida em relação a utilização da mesma para telefones. Como o Victor comentou anteriormente, é possível de que na hora do usuário ir digitando o número do telefone, o “valor” se auto-complete?

    Exemplo: O usuário digita: ” 18911111111 ” e vai completando para que fique por exemplo neste formato: ” (18) 91111-1111 ” ou ” (18)-91111-1111 ” ???

    Eu faço a utilização de vários métodos em uma classe de máscara, como CPF, CNPJ e etc, e todas elas ao digitar já vai completando com os caracteres.

    Nesse modo que você fez, é possível isso? Por quê no vídeo, deu de entender que você mesmo coloca os pontos ” . “, traços ” – ” e barras ” / “.

    Obrigado pela atenção. Bom trabalho.

    Reply
    1. david Post author

      Sim, na verdade eu mesmo, coloco estes caracteres, como é uma implementação crua, feita a toque de caixa(E ainda acho bizarro que o pessoal do JavaFX não tenha feito um componente nativo), eu deixo o código-fonte disponível para que as pessoas possam fazer aprimoramentos.

      Reply
  3. Ronaldo

    Bom dia, estou testando seu código e achei um problema, quando o campo é número, ele no mínimo ele obriga a digitar dois digitos antes da casa decimal, utilizando a máscara N!,N! por exemplo, tenho que digitar 22,33 se eu quiser algo inferior a dezena, tenho que colocar um zero antes.

    Reply
    1. david Post author

      Rapaz, nunca tinha percebido esse erro, na verdade meio que abandonei o JavaFX, mas caso tenha corrigido, fique a vontade para fazer um push no github ou criar um fork!

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *