Java Swing: Propriedades do JtextField

Veja nesse artigo como funciona a utilização do componente jTextField, personalizando as propriedades, colocando máscaras nos campos de texto, e definindo para aceitar apenas números ou letras, ou outra combinação de caracteres.

O JTextField é um componente muito utilizado em Java para a criação de formulários onde é necessário a inserção dos dados pelo teclado.

Esse campo de texto é comum também em formulários web, são nesses tipos de campos que o usuário preenche o seu nome, email, endereço, entre outros dados.

A inserção desse componente no Netbeans é possível após a criação de um novo JPanel ou Jframe, através da opção campo de texto na janela paleta.

Após a inserção desse componente no netbeans é necessário trocar o nome desse componente para ficar fácil de localiza-lo quando estivermos escrevendo código. Uma boa prática de programação é utilizar o nome do componente e acrescentar ao final o nome do tipo de dado que ele vai guardar.

Ex: Para um jTextField que vai guardar o nome de um cliente, qual deveria ser o nome desse campo: jTextFieldNome ou  jTextField_Nome.

Para efetuar esse processo no netbeans basta ir sobre o componente com o mouse e clicar com o botão direito e escolher a opção alterar noma da variável.

Depois da sua inserção pode ser necessário alterar o tamanho do componete, para isto basta clicar no componente e arrastá-lo.

Existem diversas opções de personalização desse componente basta clicar sobre  o componente com o botão direito e selecionar a opção Propriedades, vamos a algumas delas:

Além dessa propriedades mencionadas acima, ainda podemos querer definir quais tipos de caracteres devem ser aceitos pelo componente, como por exemplo, somente letras, somente números. Para conseguirmos definir essas restrições precisamos definir algumas máscaras para os campos. Primeiro precisamos definir no código um método que define o tipo de máscara para qualquer uma das opções de máscaras mencionadas anteriormente. Vamos ao código.

Escrever esse método dentro do código do formulário:

public JTextField DefinirTiposCaracteresETamanho(int tamanho,String caracteres) { try { //defino a variável que vai guardar a quantidade de caracteres String quantidade=""; //defino um método de repetição para repetir o numero de //vezes do tamanho for(int i=0 ; i < tamanho; i++) { // defino asterisco para aceitar qualquer coisa e crio a máscara quantidade=quantidade+"*"; } // **********... de acordo com o tamanho informado // defino que a mascara possui essa //quantidade de elementos que foi informado em tamanho e // foi colocada com * dentro de quantidade javax.swing.text.MaskFormatter nome=new javax.swing.text.MaskFormatter(quantidade); //defino que o parâmetro caracter recebido pelo //método contém os caracteres válidos nome.setValidCharacters(caracteres); //retorno a mascara que foi criada return new javax.swing.JFormattedTextField(nome); }// fim do try catch (Exception e) { //mensagem se acontecer erro JOptionPane.showMessageDialog(null,"Ocorreu um erro"); //retorno um campo de texto comum return new JTextField(); }//fim do catch }//fim do método

Após criar esse método basta chamá-lo dentro do código do componente.

Para isso basta clicar com o botão direito do mouse sobre o componente e escolher a opção código.

Depois escrever o código que chama o método criado na opção Código de pré-inicialização:

 jTextFieldnome=DefinirTiposCaracteresETamanho(60,  " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZçÇéáíúóÁÉÓÍÚãõÃÕ");

Onde:

Para aceitar apenas números , basta colocar assim “0,1,2,3,4,5,6,7,8,9”.

Também podemos definir máscaras para datas que aceitem apenas números para isso basta ir na opção acima e escrever esse código:

try { javax.swing.text.MaskFormatter data= new javax.swing.text.MaskFormatter("##/##/####"); jTextFielddata = new javax.swing.JFormattedTextField(data); } catch (Exception e) { JOptionPane.showMessageDialog(null,"Ocorreu um erro");//mensagem se acontecer erro }

Assim como no método anterior foi utilizado * para determinar a máscara, nesse foi utilizado o #, compare os seus significados abaixo.

      

Agora que já desenhamos o componente e colocamos as suas propriedades veremos dois métodos para manipulação dos dados do componente, um para exibir os dados e outro para trocar o conteúdo do componente.

jTextFieldNome.setText(“Digite aqui o seu nome”);     

Atribui Digite aqui o seu nome para dentro do componente, no lugar onde o usuário deve digitar.

jTextFieldNome.getText();     

Esse método exibe o que existir dentro do componente.

  

Esses métodos devem ser colocados dentro de alguma função do formulário.

Evento Focus

A utilização de eventos sobre o componente JTextField é muito importante para a validação e personalização de campos,  agora iremos ver o evento Focus, basicamente um componente pode ter dois eventos do tipo focus, o primeiro quando o Componente recebe o focus (FocusGained), e o outro quando o componente perde o focus(FocusLost).

É muito comum encontrar em sistemas, web ou desktop o campo de texto com uma mensagem para o usuário, às vezes vem a mensagem para explicar o seu preenchimento com pode ser observado.


Chamamos o campo de jTextFieldEndereco.

Após criar o campo de texto e personalizá-lo, devemos escolher qual será a mensagem que irá aparecer no campo, essa mensagem deve ser preenchida na propriedade text do JtextField.

Esse efeito acontece da seguinte maneira quando o usuário clica no campo(focusGained), o próprio campo apaga o seu conteúdo esperando a informação do usuário, quando o usuário clica em outro campo, esse campo verifica se o usuário preencheu alguma informação, caso o usuário tenha preenchido, o campo mantém o valor do usuário, caso contrário o usuário não informou nada, o campo devolve para o componente a mensagem escolhida.

Vamos criar o primeiro evento desse campo, o focusGained:

Clicar sobre o componente com o botão direito depois em  Eventos escolher a opção Focus, e depois focusGained. Irá ir direto para o código fonte, onde devemos inserir o efeito:

if (jTextFieldEndereco.getText(). equals("Ex. Av. Getúlio Vargas 1605 apt 302")) {             jTextFieldEndereco.setText("");        }

Nessa opção apenas faremos um teste para verificar se o que existe no campo é a mensagem padrão que escolhemos, se for ela limpamos o campo para esperar o preenchimento do usuário.

Vamos criar o segundo evento desse campo, o focusLost:

Clicar sobre o componente com o botão direito depois em  Eventos escolher a opção Focus, e depois focusLost. Irá ir direto para o código fonte, onde devemos inserir o efeito:

if (jTextFieldEndereco.getText().equals("")) { jTextFieldEndereco.setText("Ex. Av. Getúlio Vargas 1605 apt 302"); }

Nessa opção apenas faremos um teste para verificar se o usuário está saindo desse campo sem ter escrito nada, caso esteja devolvemos a mensagem padrão. Caso o usuário tenha informado algum texto o método mantém o texto do usuário.

Artigos relacionados