Java - Eventos Propios

 
Vista:
sin imagen de perfil

Eventos Propios

Publicado por Sergio Botta (18 intervenciones) el 26/10/2007 22:04:51
Hola a todos

Alguien tiene un ejemplo simple de eventos propios (eventos creados por el programador). En la mayoria de los libros o son realmente simples que no son aplicables o son tan complejos, que no se entienden.

Desde ya muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Eventos Propios

Publicado por jmromero (51 intervenciones) el 30/10/2007 09:42:24
Ejemplo un evento de selección de una fila de una tabla.
Primero la clase del evento:

public class EventoSeleccionTabla extends EventObject
{
/** Fila seleccionada en la tabla. */
private int filaSeleccionada;

/**
* Constructor de la clase.
* @param obj Componente Tabla que provoca el evento.
* @param fila Fila seleccionada en la tabla.
*/
public EventoSeleccionTabla(Object obj, int fila) {
super(obj);
this.filaSeleccionada = fila;
}

/**
* Devuelve la fila seleccionada de la tabla.
* @return Fila seleccionada de la tabla
*/
public int getFilaSeleccionada()
{
return filaSeleccionada;
}
}

Segundo la interfaz a implementar por todas las ventanas que quieran implementar selección de tablas:

public interface ListenerSeleccionTabla extends EventListener
{
/**
* Captura del evento de selección sobre la tabla.
* @param evt Evento de selección sobre la tabla.
*/
public void capturarEventoSeleccionTabla(EventoSeleccionTabla evt);
}

Tercero propagar el evento, para ello una clase que implementa ListSelectionListener:

public class MiTablaListSelectionListener implements ListSelectionListener
{
/** Puntero al componente tabla. */
private JTable tabla = null;

/**
* Constructor de la clase que recibe el componente tabla.
* @param t Componente tabla.
*/
public MiTablaListSelectionListener (JTable t)
{
super();
tabla = t;
}

public void valueChanged(ListSelectionEvent e)
{
if (e.getValueIsAdjusting())
{
return;
}

ListSelectionModel model = (ListSelectionModel) e.getSource();

if (!model.isSelectionEmpty())
{
int fila = model.getMinSelectionIndex();
tabla.lanzarEventoSeleccionTabla(fila);
}
else
// No hay filas seleccionadas, Fila -1
tabla.lanzarEventoSeleccionTabla(-1);
}
}

Cuarto el componente tabla debe guardar una referencia al listener, publicar el método lanzarEventoSeleccionTabla para lanzar el evento y añadir el listener de selección:

public class MiTabla extends JTable
{
/** Referencia al Evento de selección. */
private ListenerSeleccionTabla listenersSeleccionTabla;
public MiTabla()
{
super();
this.getSelectionModel().addListSelectionListener( new MiTablaListSelectionListener(this));

}
/**
* Añade un Listener de selección a la tabla.
* @param listener ListenerSeleccionTabla
*/
public void addListenerSeleccionTabla(ListenerSeleccionTabla listener) {
listenerSeleccionTabla = listener;
}

/**
* Lanza el Listener de selección de la tabla
* @param fila Fila seleccionada en la tabla.
*/
public void lanzarEventoSeleccionTabla(int fila) {
if (listenerSeleccionTabla != null)
{
listenerSeleccionTabla.capturarEventoSeleccionTabla(new EventoSeleccionTabla(this, fila));
}
}
}

Quinto capturar el evento en una ventana con un MiTabla dentro

public class Prueba implements ListenerSeleccionTabla
{
miTabla.addListenerSeleccionTabla(this);

public void capturarEventoSeleccionTabla(EventoSeleccionTabla evt)
{
if (evt.getFilaSeleccionada() != -1)
{
// Aquí haces tu código con la fila seleccionada
}
}
}


Parece complicado, pero al fin y al cabo todos los eventos son iguales o pareceidos al ejemplo que te he puesto. Debes tener en cuenta que en el ejemplo que te he puesto, sólo hay un listener de seleccón dentro de cada componente tabla, si quieres varios deberias guardar una lista y en lanzarEventoSeleccionTabla, recorrer esa lista para lanzarlos todos.

Espero que te sirva, si tienes dudas me lo comentas.

Un Saludo, Chema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Eventos Propios

Publicado por Janior Alexander (1 intervención) el 01/05/2013 22:29:19
Excelente.. puse cada paso en clases y la interface necesaria.. ademas cree un control basado en el jtable y funciona excelente.. gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar