Swing y JFC (Java Foundation Classes)

Los eventos List selection ocurren cuando una selecci�n en una list o una table cambia o acaba de cambiar. Los eventos List selection son disparados por un objeto que implementa el interface ListSelectionModel.

Para detectar un evento list selection debemos registrar un oynete con el objeto selection model apropiado. La clase JList tambi�n ofrece la opci�n de registrar un oyente sobre la propia lista, mejor que directamente al selection model de la lista.

.�M�todos de Evento List Selection

El interface ListSelectionListener s�lo tiene un m�todo y por lo tanto ni tiene la correspondiente clase adaptador. Aqu� est� el m�todo.

void valueChanged(ListSelectionEvent)
Se le llama cuando cambia la selecci�n del componente escuchado, tambi�n se la llama despu�s de que la selecci�n haya cambiado.

.�Ejemplos de Manejo de Eventos List Selection

La secci�n C�mo usar Lists proporciona un ejemplo de un oyente que escucha los eventos de una lista single-selection (no del selection model de la lista).

Esta secci�n proporciona un ejemplo que mustra c�mo escuchar este tipo de eventos en un selection model. El selection model es compartido por un lista y una tabla. Din�micamente podemos cambiar el modo de selecci�n a uno de los tres modos soportados.

  • single selection
  • single interval selection
  • multiple interval selection

Aqu� podmeos ver una im�gen del ejemplo ejecut�ndose.

Prueba esto:
  1. Compila y ejecuta la aplicaci�n. El c�digo fuente est� en ListSelectionDemo.java.
  2. Selecciona y deselecciona items de la lista y de la tabla. Los comandos requeridos de rat�n y de teclado para seleccionar �tems dependen del "aspecto y comportamiento". Para Metal, pulsa el bot�n izquierdo delr at�n para empezar una selecci�n, usa la tecla Shift para extender una selecci�n contig�a, y usa la tecla Control para extender una selecci�n discontig�a. Arrastrar el rat�n mueve o extiende la selecci�n dependiendeo del modo de selecci�n.

Aqu� est� el c�digo de ListSelectionDemo.java que configura el modelo de selecci�n y le a�ade un oyente.

...//where the member variables are defined
JList list;
JTable table;
    ...//in the init method:
    listSelectionModel = list.getSelectionModel();
    listSelectionModel.addListSelectionListener(
                            new SharedListSelectionHandler());
    ...
    table.setSelectionModel(listSelectionModel);

Y aqu� est� el c�digo para el oyente, que funciona para todos los modos de selecci�n posibles.

class SharedListSelectionHandler implements ListSelectionListener {
    public void valueChanged(ListSelectionEvent e) {
        ListSelectionModel lsm = (ListSelectionModel)e.getSource();

        int firstIndex = e.getFirstIndex();
        int lastIndex = e.getLastIndex();
        boolean isAdjusting = e.getValueIsAdjusting();
        output.append("Event for indexes "
                      + firstIndex + " - " + lastIndex
                      + "; isAdjusting is " + isAdjusting
                      + "; selected indexes:");

        if (lsm.isSelectionEmpty()) {
            output.append(" <none>");
        } else {
            // Find out which indexes are selected.
            int minIndex = lsm.getMinSelectionIndex();
            int maxIndex = lsm.getMaxSelectionIndex();
            for (int i = minIndex; i <= maxIndex; i++) {
                if (lsm.isSelectedIndex(i)) {
                    output.append(" " + i);
                }
            }
        }
        output.append(newline);
    }
}

El m�todo valueChanged muestra el primer y �ltimo �ndices reportados por el evento, el valor de la bandera isAdjusting del evento, y el indice actualmente seleccionado.

Observa que el primer y �tlimo indices reportados por el eventos indican el rango inclusivo de �tems para los que la selecci�n ha cambiado. Si el modo de selecci�n es multiple interval selection algunos �tems dentro del rango podr�an no haber cambiado. La bandera isAdjusting es true si el usuario todav�a est� manipulando la selecci�n, y false si el usuario ha terminado de modificar la selecci�n.

El objeto ListSelectionEvent pasado dentro de valueChanged indica s�lo que la selecci�n ha cambiado. El evento no contiene informaci�n sobre la selecci�n actual. Por eso, este m�todo le pide al selection model que se imagine la selecci�n actual.

Nota: La salida de este programa depende de la veri�n Swing que estemos utilizando. Swing 1.0.x contiene varios bugs y la operaci�n de listas y tablas era inconsistente. Las versiones posteriores de Swing corrigieron estos problemas.

.�La clase ListSelectionEvent

Cada m�todo de evento list selection tiene un s�lo par�metro: un objeto ListSelectionEvent. Este objeto le dice al oyente que la selecci�n ha cambiado. Un evento list selecton puede indicar un cambio en la selecci�n de m�ltiples �tems, discontig�os de la lista.

Para obtener la fuente de un ListSelectionEvent, se usa el m�todo getSource, que ListSelectionEvent hereda de EventObject. Si registramos un oyente de list selection directamente sobre una lista, la fuente de cada evento ser� la propia lista. De otra forma, ser�a el selection model.

La clase ListSelectionEvent define los siguientes m�todos.

int getFirstIndex()
Devuelve el �ndice del primer �tem cuyo valor de selecci�n ha cambiado. Observa que para selecciones de intervalo m�ltiple, el primer y �ltimo �tems es seguro que han cambiado, pero los �tems que hay entre medias podr�an no haberlo hecho.
int getLastIndex()
Devuelve el �ndice del �ltimo �tem cuyo valor de selecci�n ha cambiado. Observa que para selecciones de intervalo m�ltiple, el primer y �ltimo �tems es seguro que han cambiado, pero los �tems que hay entre medias podr�an no haberlo hecho.
int getValueIsAdjusting()
Devuelve true si se est� modificando todav�a la selecci�n. Muchos oyentes de list selections�lo est�n intereados en el estado final de la selecci�n y pueden ignorar eventos cuando este m�todo devuelve true.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR