Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Adapter en JavaBeans

Expongo mi caso.
Diseñé un componente a partir de otros componentes Swing en un JavaBeans. Este Bean manea unos eventos propios a través de una interface listener que creé. Luego agregué el componente a la paleta de NetBeans, pego el componente en el JFrame y le doy Click con el botón secundario para ver la lista de Eventos y efectivamente me muestra los métodos abstractos de mi interface. Hasta ahí todo marcha bien excepto por un detalle. Cuando voy a meter código para un evento, me genera error porque me obliga a implementar todos los métodos y no sólo el que necesito.

Se que esto se resuelve con los adapters, pero no se como decirle a NetBeans que utilice un adapter en lugar del listener.

Alguien por favor puede ayudarme con esto.

Muchas gracias de antemano.

agosto 26, 2012 | Unregistered CommenterJohan Donado Banderas

Un adapter implementa uno o varios interface, por lo tanto tiene el mismo tipo que los interface, y se puede usar exactamente igual que si se implementan directamente los interfaces.

agosto 26, 2012 | Registered Commenterchoces

Tal vez con un ejemplo sencillo sea mejor:

En este enlace encontrarás un proyecto en NetBeans con un JavaBean secillo:
prueba.jar

En la carpeta dist encontrará el archivo prueba.jar. Agregue el archivo prueba.jar a la paleta de NetBeans.

Luego cree un proyecto con un formulario JFrame y en el pegue el componente prueba.jar desde la paleta de NetBeans.

Luego click con el botón derecho del mouse sobre el control prueba que colocó en el formulario, el cual debe aparecer como dos botones. En la opción de eventos debe aparecer la opción prueba y ahí los dos eventos que creamos para nuestro componente, Accion1 y Accion2.

Escoja Accion1 y NetBeans abrirá el editor para que agregue el código para ese evento. Sin embargo observará que se muestra un error porque crea también el otro evento (Accion2):

public boolean Accion2(prueba.PruebaEvento2 evt) {
}

El problema está en que NetBeans crea este código usando PruebaListener: Cómo se puede hacer para que NetBeans use un Adapter?

prueba1.addPruebaListener(new prueba.PruebaListener() {
public void Accion1(prueba.PruebaEvento1 evt) {
prueba1Accion1(evt);
}
public boolean Accion2(prueba.PruebaEvento2 evt) {
}
});

agosto 26, 2012 | Unregistered CommenterJohan Donado Banderas

Puedes probar a reemplazar en el componente gráfico tu PruebaListener por esta clase:

public class PruebaAdapter implements PruebaListener {

@Override
public void Accion1(PruebaEvento1 evt) {
}

@Override
public boolean Accion2(PruebaEvento2 evt) {
throw new UnsupportedOperationException("Not supported yet.");
}
}

De todos modos, lo que siempre suelo hacer, para evitarme complicaciones con la Paleta de NetBeans, es extender las clases de Swing en archivos separados, usar los componentes estándar de la Paleta en el Editor Gráfico, y reemplazar el estándar por mi clase extendida, en el Editor mismo, mediante el Code Customizer.
De esa manera, no hay nunca problemas con la refactorización, ni la necesidad de que las clases con BeanInfo estén siempre compiladas, antes de usarlas en el Editor Gráfico.

agosto 26, 2012 | Registered Commenterchoces

Pero no se en que parte se debe reemplazar por el PruebaAdapter, ya que ese código lo genera automáticamente NetBeans y no puede ser modificado.

Con la segunda opción que me das no podría cambiar desde diseño las propiedades del objeto, todo abría que hacerlo desde código y se pierde el sentido del diseño de formularios con NetBeans.

agosto 27, 2012 | Unregistered CommenterJohan Donado Banderas

Me he guiado por el código de prueba, del enlace de más arriba, donde los métodos que usan PruebaListener no están automáticamente generados; a menos que me haya fallado la vista ;)

Con NetBeans se pueden diseñar aplicaciones gráficas muy complejas, sin necesidad de incorporar las extensiones de Swing a la Paleta. De hecho, cuanto más compleja es la aplicación, mejor que los formularios del Matisse sean lo más sencillos posibles.
No digamos si además se usa NetBeans Platform para el diseño de aplicaciones de escritorio.
Pero bueno, cada cual diseña como mejor le conviene.

agosto 27, 2012 | Registered Commenterchoces

Bueno. Si no hay más remedio, tendré que asignarle los eventos desde código, y ahí sí utilizar el adapter en lugar del listener. No creo que sea lo más ortodoxo porque para eso está la asignación de eventos con NetBeans, pero no hay otra por ahora.

Muchas Gracias choces por tus respuestas y sí algún día encuentras solución por favor me sacas de la duda si no es mucha molestia.

agosto 27, 2012 | Unregistered CommenterJohan Donado Banderas

Si me envías, de alguna manera, el código que genera NetBeans, donde tienes el problema, tal vez pueda ser de más ayuda.
Por mi parte, prefiero crear mediante código la mayor parte de las clases, mientras que reduzco el código generado al mínimo imprescindible. ¡Así me he ahorrado muchos disgustos! :D

agosto 27, 2012 | Registered Commenterchoces

Tienes cuanta en Google+ ?? Tal vez nos podríamos conectar por ahí y te muestro con más detalle. Me podrías ayudar por favor?

agosto 27, 2012 | Unregistered CommenterJohan Donado Banderas

Si te registras en este portal como usuario, puedes ver mi dirección de correo, y usarla cuando gustes ;)

agosto 27, 2012 | Registered Commenterchoces