Dúvida sobre o que é e como criar um Adaptador

3 respostas
G

O já tem classes adaptadoras como o WindowAdpter e MouseAdapter. O que ela faz é permitir que o usuário adcione ao listener um objeto herdado dessa classe implementando somente os métodos que ele precisar.
Uma classe de Adapter é uma classe abstrata que implementa uma interface, mas se é uma classe abstrata os seus métodos (os mesmos da interface) não deveriam ser/ou são abstratos? E se os métodos são abstratos, não seria obrigatório implementar todos na classe que herda o Adapter? E se os métodos não são abstratos, por que razão a classe é defina como sendo abstrata?
Gostaria também que alguém me explicasse melhor essa questão dos adaptadores e me dessem um exemplo de como criar um bem simples.

3 Respostas

B

Ola

Bem, pra começar os adaptadores não são abstratos, eles são classes que implementam uma interface, um listener, com muitos metodos, assim ele te dá a opção de extente-lo e implementar só o método que vc quer, vc já chegou a isto :slight_smile:

Bom, para fazer um adaptador é facil, só vc nomiar a classe sua como XXXAdapter, onde o XXX é o nome do listaner que vc tá criando o adapter e implemente esta interface, implemente cada metodo com o corpo vazio… pronto, vc criou um adapter…

Ex.:

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class MouseAdapter implements MouseListener {

	public void mouseClicked(MouseEvent arg0) {
	}

	public void mouseEntered(MouseEvent arg0) {
	}

	public void mouseExited(MouseEvent arg0) {
	}

	public void mousePressed(MouseEvent arg0) {
	}

	public void mouseReleased(MouseEvent arg0) {
	}
}
J

Na realidade os adaptadores dos Listeners são abstratos sim, mas o fato de uma classe ser abstrata não quer dizer que ela precisa ter metodos abstratos, o que acontece com um MouseAdapter por exemplo é que se você implementar a interface MouseListener você teria que implementar todos os metodos dela, se a classe MouseAdapter tivesse metodos abstratos, daria na mesma, você teria que implementar todos eles... então os metodos da classe são implementados vazios, assim sendo, não faz sentido instanciar a classe diretamente, pois o objeto será inutil, então ela é marcada como abstrata só pra não poder ser instanciada...

o codigo da classe é esse:

public abstract class MouseAdapter implements MouseListener {
    /**
     * Invoked when the mouse has been clicked on a component.
     */
    public void mouseClicked(MouseEvent e) {}

    /**
     * Invoked when a mouse button has been pressed on a component.
     */
    public void mousePressed(MouseEvent e) {}

    /**
     * Invoked when a mouse button has been released on a component.
     */
    public void mouseReleased(MouseEvent e) {}

    /**
     * Invoked when the mouse enters a component.
     */
    public void mouseEntered(MouseEvent e) {}

    /**
     * Invoked when the mouse exits a component.
     */
    public void mouseExited(MouseEvent e) {}
}
G

Ok, é isso então

Criado 5 de outubro de 2006
Ultima resposta 6 de out. de 2006
Respostas 3
Participantes 3