Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] ActionListener

Estas en el tema de ActionListener en el foro de Java en Foros del Web. Hola pues bueno, viendo codigos por la red veo que la gente instancia la interfaz ActionListener, como es eso posible, segun he leido las interfaz ...
  #1 (permalink)  
Antiguo 03/02/2014, 20:49
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 12 años, 6 meses
Puntos: 1
ActionListener

Hola pues bueno, viendo codigos por la red veo que la gente instancia la interfaz ActionListener, como es eso posible, segun he leido las interfaz al igual que las clases abstracta no pueden ser instanciada o crear un objeto, pues bien pondre a prueba de ejemplo lo que vi por la red:

ActionListener ac = new ActionListener(); es posible esto?
addActionListener(new ActionLIstener()); y esto tambien es posible?

En la primera se crea un objeto de la interfaz y en la segunda una instancia, alguien me lo explica? Gracias y un saludo.
  #2 (permalink)  
Antiguo 04/02/2014, 01:59
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: ActionListener

Hola:

Efectivamente, no es posible ActionListener ac = new ActionListener(); ni la otra variante que pones, pero sí es posible

Código Java:
Ver original
  1.    public void actionPeformed(ActionEvent e) {
  2.             .....
  3.    }
  4. }

es una forma que permite java de implementar una interfaz sobre la marcha, sin necesidad de tener que crear explícitamente una clase. Inmediatamente despues de new ActionListener() debes abrir una llave {, implementar TODOS los métodos de la interfaz o los métodos abstractos si en vez de interfaz fuera una clase abstracta, y finalmente cerrar la }

Puedes hacerlo también sin necesidad de guardarla en una variable, puedes hacerlo directamente como parámetro de un método que es la segunda opción que muestras

Código Java:
Ver original
  1. addActionListener(new ActionLIstener() {
  2.    public void actionPeformed(ActionEvent e) {
  3.             .....
  4.    }
  5. });

Este tipo de clases así definidas se llaman clases anónimas, puesto que se crean sobre la marcha y no tienen nombre. En los .class generados, si haces esto por ejemplo en un fichero Ventana.java, verás Ventana.class y Ventana$1.class, donde Ventana.class es la clase compilada de tu fichero Ventana.java y Ventana$1.class sería una de esas clases anónimas definidas dentro de Ventana.java

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 04/02/2014, 07:57
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: ActionListener

Vaya no sabia que eso se podia,jejeje. Bueno entonces si utilizamos esta forma de clase anonima en la clase que implementa ese interfaz anonimo hay que poner tambien implements ActionListener? Gracias y un saludo.
  #4 (permalink)  
Antiguo 04/02/2014, 08:30
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Respuesta: ActionListener

No te compliques mucho con tantas palabras, el concepto es el mismo:
"Una clase está obligada a implementar todos los métodos declarados en una inteface"
__________________
BadProgrammerException!
  #5 (permalink)  
Antiguo 04/02/2014, 09:26
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: ActionListener

Si claro, creo que lo entendi, lo que quiero decir es que si utilizamos esa forma anonima no seria necesario esto:

public class Probar implements ActionListener{

ya que si lo hacemos sobre la marcha eso de arriba sobra,no?
Saludos.
  #6 (permalink)  
Antiguo 04/02/2014, 10:14
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: ActionListener

Hola:

Son alternativas. Si la clase Probar implementa ActionListener, lo más posible es que en algún sitio pongas

addActionListener(this); // siendo this la instancia de Probar

esto es lo que normalmente hace la gente que empieza.

Con clases anónimas no es necesario eso. En general las clases anónimas son útiles para interfaces con pocos (un) método o si necesitas muchas implementaciones de listener dentro de la clase. Si tu Prueba implementa ActionListener, solo puedes poner una implemetación que quizás no te valga para todos los botones.

Quizás esto te aclare un poco más http://chuwiki.chuidiang.org/index.p...ActionListener . Aunque es específico de ActionListener, se comentan más o menos los coceptos de clase anónima o clase que implementa la interfaz...

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: actionlistener, clase
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:25.