Foro de elhacker.net

Programación => Java => Mensaje iniciado por: JonaLamper en 6 Abril 2015, 11:48 am



Título: Duda con interfaz Listener (MouseListener)
Publicado por: JonaLamper en 6 Abril 2015, 11:48 am
Buenos días,

(http://s2.subirimagenes.com/imagen/previo/thump_9360482e1.png) (http://www.subirimagenes.com/imagen-e1-9360482.html)


Como vemos, tengo dos botones (a1 y a2) los cuales implementan distintas interfaces. El botón a1 implementa ActionListener y el botón a2 implementa MouseListener.

El botón a1 implementa el único método de la interfaz ActionListener, es decir, el método actionPerformed. Ahora bien, cuando voy a usar la interfaz MouseListener, solo quiero utilizar el método mousePressed, pero debo declarar todos los demás métodos (pues estoy implementando una interfaz).

El problema es que queda feísimo el código, porque aparecen 4 métodos que no uso para nada. ¿Se puede hacer algún apaño para que no quede tan feo?


Título: Re: Duda con interfaz Listener (MouseListener)
Publicado por: Usuario Invitado en 6 Abril 2015, 13:49 pm
Una interface es un contrato y describe el comportamiento que debe tener las clases que la implementen. Por lo que, al hacer eso te ves obligado a sobreescribir esos métodos porque en esencia esa clase es la misma interface pero mostrando su implementación.

Lo que puedes hacer es hacer que una clase abstracta la implemente:

Código
  1. public abstract class AbstractMouseListener implements MouseListener {
  2.  
  3.    // todos los metodos de MouseListener
  4. }

Y tu controlador hereda de la clase abstracta:

Código
  1. public class SomeController extends AbstractMouseListener {
  2.    private SomeGUI gui;
  3.  
  4.    public SomeController(SomeGUI gui) {
  5.        this.gui = gui;
  6.    }
  7.    @Override
  8.    public void mousePressed(MouseEvent event) {
  9.        // hacer algo
  10.    }
  11. }


Saludos.