• Nenhum resultado encontrado

153Todos os direitos reservados a 3Way Networks

No documento Linguagem Java COMPLETA (páginas 153-155)

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 139

11.5.4 Implementando Manipuladores de Eventos com Anonymous inner class

Como foi visto no Capítulo 7.14, as anonymous inner class, são classes internas que são declaradas sem um nome. Normalmente são utilizadas em contextos onde o reuso da classe não é importante. Por exemplo podemos declarar uma anonymous inner class como um argumento de método ou atribuição de uma variável.

Se você observar a listagem anterior verá que o manipulador de evento ActionListener foi implementado pela própria classe ActionDemo, mas essa estratégia pode causar alguns transtornos quando você tem que manipulador as ações de vários botões. Você consegue perceber a dificuldade? Você terá que saber qual botão disparou o evento. Fazer isso não é difícil, mas é enfadonho, veja um exemplo com três botões:

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

public class ActionDemo extends JFrame implements ActionListener { private JTextField tf;

private JButton bt1; private JButton bt2; private JButton bt3;

public ActionDemo(String title) { super(title);

tf = new JTextField();

bt1 = new JButton("botão 1"); bt2 = new JButton("botão 2"); bt3 = new JButton("botão 3"); add(tf, BorderLayout.SOUTH); add(bt3, BorderLayout.EAST); add(bt2, BorderLayout.CENTER); add(bt1, BorderLayout.WEST); setSize(300, 300);

bt1.addActionListener(this); bt2.addActionListener(this); bt3.addActionListener(this); //o evento windowClose e disparado

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true);

}

public void actionPerformed(ActionEvent actionEvent) { if (actionEvent.getSource()== bt1)

tf.setText("Cliquei no botão 1"); else if (actionEvent.getSource()== bt2) tf.setText("Cliquei no botão 2");

JButton bt = (JButton) actionEvent.getSource(); if (bt.getActionCommand().equals("botão 3"))

tf.setText("Cliquei no botão 3"); }

public static void main(String args[]) { new ActionDemo("Action Demo 2"); }

}

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores. Veja que no método actionPerformed() você tem que testar qual botão disparou o evento usando uma das comparações com actionEvent.getSource(), que retorna a referência do objeto fonte do evento, ou fazendo

casting desta referencia para inferir sobre o rótulo do botão. Você pode utilizar uma anonymous inner class para

fazer o mesmo, veja:

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

public class ActionDemo3 extends JFrame { private JTextField tf;

private JButton bt;

public ActionDemo3(String title) { super(title);

tf = new JTextField();

bt = new JButton("Cliqui Aqui"); add(tf, BorderLayout.SOUTH); add(bt, BorderLayout.NORTH); setSize(300, 300);

// usando anonymous inner class como argumento do método bt.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent actionEvent) { // acao depende do conteudo do campo texto tf if (tf.getText().equals("Ação 3"))

tf.setText("Cliquei e mudei"); else

tf.setText("Ação 3"); }

});

// o evento windowClose e disparado

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true);

}

public static void main(String args[]) { new ActionDemo3("Action Demo 3"); }

}

Listagem 11.11 – Eventos de Ação

Você cria um objeto em tempo de execução para o evento, este fará a chamada a um método, que se encarregará de executar as instruções, desta forma cada botão tem seu próprio manipulador de evento, não sendo preciso testar qual objeto disparou o evento, pois o objeto manipulador do evento é único para cada objeto fonte. Isto faz sentido, você concorda? O objeto de botão realizará uma ação exclusiva, o código do manipulador não necessitará ser reaproveitado em momento algum.

11.6Classes Adaptadoras

Vamos implementar um exemplo de uso da interface MouseListener e MouseMotionListener. Diferentemente da interface ActionListener, esta interface define cinco e dois métodos respectivamente, portanto você deve implementar todos os métodos grafados nas interfaces, veja exemplo:

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

155

No documento Linguagem Java COMPLETA (páginas 153-155)

Documentos relacionados