Baixe o app para aproveitar ainda mais
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
Compartilhar