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.
Dúvida sobre o que é e como criar um Adaptador
3 Respostas
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 
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:
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) {}
}
Ok, é isso então