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

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.

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) {
	}
}

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:

[code]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) {}

}[/code]

Ok, é isso então