JTextField e JPasswordField - Como usar caixas de texto e de senha em Java

Apostila de Java para download
Dando continuidade a nossa seção de Interfaces Gráficas do Usuário (GUI), vamos ensinar o que é, para que serve e como usar as caixas de textos e de senha, as JTextField e JPasswordField, que nos possibilitarão a comunicação entre nosso aplicativo Java e a entrada do usuário pelo teclado.

Ao final deste tutorial de Java, iremos criar um exemplo mostrando uma aplicação simples de Login e Senha.

JTextField - Caixas de Texto

Qual a primeira coisa que você faz após ligar seu computador?
Qual a primeira ação, interação que você tem com sua máquina?
Provavelmente é preencher o login e senha para logar em seu sistema operacional.

Deve fazer o mesmo para acessar seu e-mail ou alguma rede social.
Ao fazer uma compra na internet, você precisa preencher todos os seus dados, como nome, data de nascimento, número do cartão de crédito etc.

Não sei se reparou, mas a todo instante estamos tendo contato com caixas de texto.
Ou seja, escrevemos algo e o que digitamos é enviado para algum lugar, é usado em algum algoritmo para testar, validar, armazenar ou checar o que digitamos.

Tudo isso é feito com caixas de texto, que é o foto deste nosso tutorial de nossa apostila de Java.
Ou seja, nem precisamos entrar em detalhes o quão importante estas caixas são, portanto devemos aprender a criar tal recurso em programação Java.

Isso é feito através da componente JTextField.



JTextField - Como criar e usar uma caixa de texto em Java

Assim como outros JComponents, precisamos primeiramente importar a classe responsável por cada componente. No caso das caixas de texto, devemos importar:
import javax.swing.JTextField;

Vamos declarar isso em uma classe chamada "CaixaDeTexto", que irá estender um JFrame.
Inicialmente, vamos usar 3 componentes. Duas caixas de texto: "fixo" e "caixa" ; e uma JButton, o "exibe".
Vale ressaltar que sempre que inicializamos uma caixa de texto, ela terá automaticamente uma string, que é exibida na caixa de texto.

Devemos aprender, inicialmente, três importantes métodos de um JTextField:
  • setTexto(String str) - Faz a caixa de texto armazenar a string "str"
  • getTexto() - Retorna a string de um JTextField
  • setEditable(boolean b) - Há duas opções de caixas de texto, as editáveis (onde é possível escrevermos algo) e as não editáveis (caixas que possuem um texto fixo, que não é possível alterar, como as conhecidas "Termos e Regulamentos" que sempre aceitamos sem ler :)

Exemplo sobre JTextField

Crie um programa que exiba duas caixas de texto, uma editável e outra não editável, e dois botões, um de "Exibe" que mostra o texto digitado em uma caixa de diálogo e um botão de "Limpar", que apaga o conteúdo da caixa de texto editável.

Vamos inicializar a caixa de texto não editável com a string "Não é possível alterar essa caixa de texto".
Já a JTextField editável, vamos iniciar com o número 20, que representa o número de caracteres que a string dessa caixa de texto armazena.

Os dois botões são inicializados com seus nomes "Exibir" e "Limpar".
Agora vamos tratar os eventos dos botões (não precisamos tratar as JTextField's, pois ao passo que digitamos algo na caixa de texto, a sua string já é automaticamente mudada e atualizada).

Vamos usar objetos anônimos, visto que são JButtons simples, onde cada um faz uma coisa específica:
O botão "Exibir" simplesmente exibe uma JOptionPane com a string da caixa de texto, que está armazenada em: caixa.getText()

E o botão "Limpar" simplesmente coloca uma string vazia na caixa de texto. Isso é feito pelo método:
caixa.setText("");

E pronto! Veja o código e teste:

Main.java


import javax.swing.JFrame;
public class Main {
	public static void main(String[] args) {
		  CaixaDeTexto texfield = new CaixaDeTexto();
		  
		  texfield.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		  texfield.setSize(310,110);
		  texfield.setVisible(true);
	}

}


CaixaDeTexto.java


import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;

public class CaixaDeTexto extends JFrame{
	private JTextField fixa, caixa;
	private JButton exibe, limpa;
	
	public CaixaDeTexto(){
		super("JTextField - Caixas de texto");
		setLayout(new FlowLayout());
		
		fixa = new JTextField("Não é possível alterar essa caixa de texto");
		fixa.setEditable(false);
		add(fixa);
		
		caixa=new JTextField(20);
		add(caixa);
		
		exibe = new JButton("Exibir");
		exibe.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evento){
				if(evento.getSource() == exibe)
					JOptionPane.showMessageDialog(null, caixa.getText());
			}
		 }
		);
		add(exibe);
		
		limpa = new JButton("Limpar");
		limpa.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evento){
				if(evento.getSource() == limpa)
					caixa.setText("");
			}
		 }
		);
		add(limpa);
	}
	
	
}


JPasswordField - Como criar caixas de senha

Se você aprendeu bem como se usar o JTextField, já entendeu como funciona a JPasswordField, pois a única diferença é que este JComponent exibe asteriscos no lugar dos caracteres que o usuário escreve.

Você não vê a string digitada, mas ela está lá, presente no JPasswordField.
Embora não possamos ver, podemos trabalhar normalmente com a string.
Por exemplo, podemos comparar duas strings: a senha original e a que o usuário digitou, se estiverem iguais, sucesso. Se não, não entra ;)

Exemplo de uso do JPasswordField
Crie um programa em Java que pede o nome de usuário e senha para o usuário.
Caso estejam certos, uma mensagem de sucesso é exibida, caso contrário uma mensagem de erro é mostrada na caixa de diálogo.
Implemente também um botão para limpar ambos campos.

A única dificuldade que alguém pode ter neste exercício é o da comparação de strings, que é feita através do método X.equals(Y), que retorna TRUE caso X seja igual a Y, e FALSE caso contrário.

E agora nosso botão "Limpar" coloca uma string vazia tanto no usuário como na senha.
Vamos usar dois JLabels, que estarão escritos "Usuário" e "Senha", ao lado das caixas de texto e de senha.

Como você é programador Java, certamente olhando para o código você é capaz de descobrir qual o usuário e senha para entrar no sistema :)


Main.java


import javax.swing.JFrame;
public class Main {
	public static void main(String[] args) {
		  CaixaDeTexto texfield = new CaixaDeTexto();
		  
		  texfield.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		  texfield.setSize(310,110);
		  texfield.setVisible(true);
	}

}


CaixaDeTexto.java

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;

public class CaixaDeTexto extends JFrame{
	private JTextField usuario;
	private JPasswordField senha;
	private JButton login, limpa;
	private JLabel user, pass;
	
	public CaixaDeTexto(){
		super("Login em Java");
		setLayout(new FlowLayout());
		
		user = new JLabel("Usuário: ");
		add(user);
		
		usuario = new JTextField(15);
		add(usuario);
		
		pass = new JLabel("Senha:   ");
		add(pass);
		
		senha = new JPasswordField(15);
		add(senha);
		
		login = new JButton("Entrar");
		login.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evento){
				if(evento.getSource() == login)
					if(usuario.getText().equals("Java") && senha.getText().equals("progressivo"))
						JOptionPane.showMessageDialog(null, "Parabéns, você entrou na Matrix!");
					else
						JOptionPane.showMessageDialog(null, "Senha errada! Estude Java!");
				
			}
		 }
		);
		add(login);
		
		limpa = new JButton("Limpar");
		limpa.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evento){
				if(evento.getSource() == limpa){
					usuario.setText("");
					senha.setText("");
				}
			}
		 }
		);
		add(limpa);
	}
	
	
}

Exercício de Java

Crie um programa que peça o peso do usuário (em kg) e sua altura (em metros) através de caixas de texto do tipo JTextField e exiba o resultado do IMC da pessoa quando ela clicar em "Calcular">
A fórmula do IME é: Peso/(altura x altura)
Implemente um botão de limpar.

3 comentários:

ernando oliveira disse...

simples, pratico, parabéns

ViZanowski disse...

Muito Obrigado! Me salvou!

Maike Abreu disse...

Muito Obrigado!!!

Dicas e Novidades de Java por e-mail

Sabe quanto custa um bom livro de java?
Entre R$ 100,00 e R$300,00

Sabe quanto custa um bom curso presencial de Java?
Entre R$ 1.500,00 até R$ 4.000,00

Sabe quanto custa estudar pelo Java Progressivo?
Absolutamente nada.

Porém, também precisamos de sua ajuda e apoio.
Para isso, basta curtir nossa Fan Page e clicar no botão G+ do Google.