Buscar

POO 24 gui teoria pratica

Prévia do material em texto

INTERFACE GRÁFICA DO 
USUÁRIO (GUI): TEORIA E 
PRÁTICA
Thaís Alves Burity Rocha
Agenda
 Eventos
 Classes internas
 Classes anônimas
 Boas práticas de programação OO
 Prática
Importante:
São mostrados fragmentos
de código apenas
Tratamento de Eventos
 Os componentes sozinhos não reagem às ações do 
usuário (eventos)
 É necessário associar o componente à um listener
 Listener = Ouvinte de eventos
 Define o que deve ser feito quando o evento ocorre
 Exemplo: Ao clicar no botão enviar, a entrada 
deve ser exibida na saída
Tratamento de Eventos: Exemplo
public class GuiSimples implements ActionListener{
JTextField entradaTexto, saidaTexto;
public void actionPerformed(ActionEvent evento) {
saidaTexto.setText(entradaTexto.getText());
}
public void criarTela(){
JLabel entradaLabel = new JLabel("Entrada:");
entradaTexto = new JTextField(20);
JLabel saidaLabel = new JLabel("Saída:");
saidaTexto = new JTextField(20);
saidaTexto.setEditable(false);
JButton botao = new JButton("Enviar");
botao.addActionListener(this);
//cria e configura janela
//insere componentes na janela
} 
}
Método que
precisa ser 
sobrescrito
Tratamento de Eventos: Problema
 E se a tela tivesse dois botões?
 Como definir um comportamento para cada botão?
 Implementar dois métodos actionPerformed() não é possível
 Alternativa: 2 classes de listener
 BotaoCancelarListener
 BotaoCorListener
Tratamento de Eventos: Uma Solução
public class Gui {
JButton botaoCor, botaoCancelar;
JTextField texto;
public void criarTela(){
// criação de componentes e container
botaoCor.addActionListener(new BotaoCorListener());
botaoCancelar.addActionListener(new BotaoCancelarListener());
}
public static void main(String... args){
Gui gui = new Gui();
gui.criarTela();
}
} public class BotaoCorListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
//como acessar o conteúdo da caixa de texto?
}
}
Similar à 
BotaoCorListener
A classe precisaria ter um 
atributo JTextField
Tratamento de Eventos: Solução Melhor
 Usar classes internas
 Uma classe interna é declarada no corpo de outra
classe, método ou bloco
 No corpo da classe: É um membro da classe
também
 Por isso, pode usar todas as variáveis e métodos da 
classe externa, mesmo que sejam private
Tratamento de Eventos: Classes 
Internas
public class Gui {
JButton botaoCor, botaoCancel; JTextField texto;
public void criarTela(){
// código para criar a janela e seus componentes
botaoCor.addActionListener(new BotaoCorListener());
botaoCancel.addActionListener(new BotaoCancelListener());
}
public class BotaoCorListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
texto.setBackground(Color.RED);
}
}
public class BotaoCancelListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
texto.setBackground(Color.WHITE);
}
}
}
Tratamento de Eventos: Solução
Alternativa
 Usar classes anônimas
 Classe interna com escopo de bloco e que não possui
nome
 Adequado quando a classe é usada apenas 1 vez
 Possibilita a geração de código mais enxuto
 A classe é declarada e instanciada ao mesmo tempo
 Porém, compromete a legibilidade do código
 Ferramentas para criação de GUI utilizam bastante
Tratamento de Eventos: Classes 
Anônimas
public class Gui {
JButton botaoCor, botaoCancel; JTextField texto;
public void criarTela(){
// código para criar a janela e seus componentes
botaoCor.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
texto.setBackground(Color.RED);
}
});
botaoCancelar.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
texto.setBackground(Color.WHITE);
}
});
}
}
Cria uma instância de 
uma classe que
implementa essa interface
Tratamento de Eventos: Orientação
 São vários os eventos e, por consequência, os
listeners existentes
 Para saber os eventos que um componente suporta, 
verifique os listeners que podem ser associados a 
ele
 Métodos addXListener() suportados
Boas Práticas de Programação OO
 Organizar as classes relacionadas a GUI em um 
pacote separado
 O uso de ferramentas para ajudar na criação de 
GUI é bastante recomendado
 Programação visual:
 Inclui recursos para gerar automaticamente parte do código
de tratamento de eventos
 Netbeans e plugin para Eclipse
Referência
 Tutorial da Oracle
 http://docs.oracle.com/javase/tutorial/uiswing/compo
nents/index.html
Prática
Lista 9, Questão 1, letra a
 Crie uma classe para GUI denominada 
AplicacaoPoupanca que, ao ser executada, gera uma 
janela (classe JFrame) como a mostrada a seguir
 Não configure gerenciadores de layout
 Dica: Configure o tamanho das caixas de texto como 15 e 
os limites da janela usando o método 
setBounds(50,100,330,150) de JFrame
Lista 9, Questão 1, letra b
 Desenvolva uma nova versão da classe 
AplicacaoPoupanca, de maneira que a janela gerada 
tenha a aparência da figura a seguir
 Dica: Utilize o gerenciador de layout GridLayout, que 
divide a tela em células, tal como uma matriz (construtor 
com 2 parâmetros – linhas e colunas, respectivamente)
Lista 9, Questão 1, letra d
 Atualize a última versão da classe 
AplicacaoPoupanca, adicionando o tratamento 
de eventos ao botão de OK, a fim de que os 
valores de entrada sejam passados para o método 
de cálculo da classe Poupanca e o resultado 
obtido seja exibido no local apropriado na GUI

Continue navegando