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:
- Background: cor de fundo do componente.
- Editable: Propriedade que se estiver marcada permite a inserção/remoção pelo teclado.
- Font: Definir fonte tamanho e estilo de texto.
- Forenground: Cor do texto.
- horizontalAlignment: Alinhamento do texto dentro do componente.
- Text: texto que está dentro do campo.
- toolTipText: texto que aparece sobre cursor quando é posicionado sobre o componente.
- Cursor: define o cursor que aparece sobre o componente.
- Border: define a borda para o componente.
- selectedTextColor: cor do texto quando estiver selecionado.
- selectionColor: cor da seleção do texto.
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:
- jTextFieldnome é o nome do componente que vai utilizar essa máscara.
- 60: é o tamhao de caracteres que serão aceitos.
- "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZçÇéáíúóÁÉÓÍÚãõÃÕ" : são os caracteres que serão aceitos pela máscara, nesse caso todas as letras do alfabeto e espaço.
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.
- # : Usa número válido, usa Character.isDigit
- ' : Caractere de escape, usado para escape de qualquer caractere de formato especial
- U : Qualquer caractere(Character.isLetter). Todas as letras minúsculas são transformadas em maiúsculas.
- L : Qualquer caractere(Character.isLetter). Todas as letras maiúsculas são transformadas em minúsculas.
- A : Qualquer caractere ou digito (Character.isLetter ou Character.isDigit)
- ? : Qualquer caractere
- * : Qualquer coisa
- H : Qualquer caractere hexadecima(0-9, a-f ou A-F)
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.