Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

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 IMC é: Peso/(altura x altura)
Implemente um botão de limpar.

7 comentários:

Unknown disse...

simples, pratico, parabéns

ViZanowski disse...

Muito Obrigado! Me salvou!

Unknown disse...

Muito Obrigado!!!

Moizés Dias Santos Júnior disse...

Olá. poderia me ajudar? eu tentei fazer o exercicio do final. Mas sempre q tento passar o texto da caixa para valor numérico dá erro. eu usei o getText() pra pegar o conteudo da caixa e armazenei numa variavel do tipo string e depois usei o Float.valueOf(variavel) pra fazer o cálculo mas ta dando erro é algo a ver com a forma de calculo q fiz?

Igor disse...

Salvou a pátria vlw mesmo.

Ivens Joris disse...

Caso alguem tenha o mesmo problema de Moizés, o comando para converter uma String em número, é:
x = Integer.parseInt(String Object);
ou se for Float ou Double:
x = Float.parseFloat(String Object);
x = Double.parseDouble(String Object);

lembrando que os valores com ponto flutuante, tem de ser digitados com ponto, e não virgula, se não terá erro

tem um capitulo da Apostila que explica sobre isso:
http://www.javaprogressivo.net/2012/09/como-passar-variaveis-do-tipo-string.html

um pouco de tudo disse...

Qual a diferença no java entre o campo de texto e o campo de senha? *

Contribuir com o Java Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo


Tutoriais de Java