Java GUI: Events, Listeners e Handlers na Prática com Swing
Aprender Java GUI significa aprender a trabalhar com eventos. Afinal, toda interface gráfica depende da interação do usuário: cliques em botões, textos digitados, teclas pressionadas e janelas abertas ou fechadas.
Neste tutorial vamos aprender na prática como funcionam Events, Listeners e Handlers, criando um jogo de adivinhação usando JFrame, JButton, JLabel e JTextField.
O que são Events, Listeners e Handlers?
Aplicações gráficas utilizam o modelo de programação orientada a eventos (Event Driven Programming).
O funcionamento é simples:
- O usuário realiza uma ação.
- Um evento é gerado.
- Um Listener detecta esse evento.
- Um Handler executa alguma ação.
Por exemplo, ao clicar em um botão, um objeto ActionEvent é criado e enviado para um ActionListener.
Projeto: Jogo de Adivinhação
Nosso programa irá gerar um número aleatório entre 1 e 1000.
O jogador deverá informar palpites até encontrar o número correto.
Após cada tentativa, o sistema fornecerá dicas informando se o número procurado é maior ou menor.
Componentes Utilizados
- JFrame — Janela principal da aplicação
- JLabel — Exibe mensagens na tela
- JTextField — Campo para digitação
- JButton — Botões de ação
- ActionListener — Escuta eventos
- ActionEvent — Representa um evento ocorrido
📚 Estudando Java?
Se você está aprendendo Java, Swing, Orientação a Objetos e desenvolvimento de aplicações desktop, confira o Mega Pack do Projeto Progressivo.
Código Completo da Classe Principal
A classe principal cria a janela e exibe a aplicação:
import javax.swing.JFrame;
public class GuessTheNumber
{
public static void main(String[] args)
{
window mainWindow = new window();
mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWindow.setSize(400,150);
mainWindow.setVisible(true);
}
}
Criando a Classe Window
A classe window herda de JFrame, tornando-se uma janela gráfica do Swing:
public class window extends JFrame
{
}
Import necessário:
import javax.swing.JFrame;
Declarando os Componentes da Interface
private JButton generateButton; private JButton guessButton; private JTextField textField; private JLabel guess; private int number;
Esses objetos representam todos os elementos gráficos utilizados pelo programa.
Gerando um Número Aleatório
O método abaixo gera um número entre 1 e 1000:
public void generate()
{
Random gen = new Random();
number = gen.nextInt(1000) + 1;
}
Import necessário:
import java.util.Random;
Configurando o JFrame
Dentro do construtor configuramos o título da janela e o layout:
public window()
{
super("Adivinhe o Número");
setLayout(new FlowLayout());
generate();
}
Import necessário:
import java.awt.FlowLayout;
Adicionando o JTextField
textField = new JTextField(27); add(textField);
O JTextField será utilizado para receber os palpites do jogador.
Capturando Eventos com ActionListener
Sempre que o usuário pressionar Enter ou clicar em um botão, um ActionEvent será disparado.
public void actionPerformed(ActionEvent event)
{
}
Imports necessários:
import java.awt.event.ActionListener; import java.awt.event.ActionEvent;
Criando o Handler
O Handler será responsável por processar todos os eventos da aplicação.
public class Handler implements ActionListener
{
@Override
public void actionPerformed(ActionEvent event)
{
// tratamento dos eventos
}
}
Capturando o Valor Digitado
if(event.getSource() == textField)
{
test(
Integer.parseInt(
event.getActionCommand()
)
);
}
O método getActionCommand() retorna o conteúdo digitado pelo usuário.
Criando o Botão Testar
guessButton = new JButton("Testar");
guessButton.addActionListener(handler);
add(guessButton);
Criando o Botão Gerar Outro Número
generateButton = new JButton("Gerar Outro Número");
generateButton.addActionListener(handler);
add(generateButton);
Lógica Principal do Jogo
A validação do palpite fica concentrada em um único método:
public void test(int attemp)
{
if(attemp < number)
{
JOptionPane.showMessageDialog(
window.this,
"Errou. O número é maior."
);
}
else if(attemp > number)
{
JOptionPane.showMessageDialog(
window.this,
"Errou. O número é menor."
);
}
else
{
JOptionPane.showMessageDialog(
window.this,
"Parabéns, você acertou!"
);
textField.setEditable(false);
}
}
Import necessário:
import javax.swing.JOptionPane;
Versão Moderna com Lambda (Java 8+)
Atualmente é comum substituir classes Handler por expressões lambda:
guessButton.addActionListener(e ->
{
int attemp = Integer.parseInt(
textField.getText()
);
test(attemp);
});
Essa abordagem reduz a quantidade de código e facilita a manutenção da aplicação.
Conclusão
Neste projeto você aprendeu os principais fundamentos do desenvolvimento de interfaces gráficas com Java Swing:
- JFrame
- JLabel
- JTextField
- JButton
- ActionListener
- ActionEvent
- Handlers
- Programação orientada a eventos
Esses conceitos formam a base para aplicações desktop mais avançadas, incluindo sistemas comerciais, ferramentas administrativas, jogos simples e aplicações corporativas.
Um comentário:
Show
Postar um comentário