Tutorial de Java

Barras de Desplazamiento

Anterior | Siguiente
El control de los eventos producidos por las barras de desplazamiento es diferente a lo que se ha presentado en los ejemplos que se han visto hasta ahora, como es el caso de la pulsación de botones del ratón.

Para crear un objeto receptor de eventos del ratón, se implementa un interfaz MouseListener, o se extiende la clase MouseAdapter; sin embargo, para crear un objeto receptor de eventos para una Barra de Desplazamiento, no se puede implementar un objeto ScrollbarListener o extender una clase ScrollbarAdapter, porque no existen. En su lugar, hay que implementar un interfaz AdjustmentListener; que no dispone de una clase AdjustmentAdapter, porque no es necesaria ya que el interfaz solamente declara el método adjustmentValueChanged().

En el interfaz MouseListener se declaran cinco tipos diferentes de eventos de ratón:

    mouseClicked()
    mouseEntered()
    mouseExited()
    mousePressed()
    mouseReleased()

Aunque no se han tratado todavía, hay dos tipos de eventos adicionales que están declarados en el interfaz MouseMotionListener:

    mouseDragged()
    mouseMoved()

Cada uno de los eventos de ratón citados, están representados por la declaración de un método en uno u otro de los interfaces definidos para crear clases receptoras de la actividad del ratón. El programador puede sobreescribir aquellos métodos de los eventos que realmente le interesen.

La clase AdjustmentEvent define varios métodos que se pueden utilizar para extraer información del objeto, en caso de necesitar acceder a esa información. Datos como el valor de la barra o el nombre del Componente Scrollbar, también están codificados en el objeto.

Los tipos de eventos de ajuste están definidos como variables estáticas en la clase AdjustmentEvent, y son:

    UNIT_INCREMENT 
    UNIT_DECREMENT 
    BLOCK_INCREMENT 
    BLOCK_DECREMENT 
    TRACK 

Los dos eventos UNIT se generan al pulsar con el botón sobre las flechas de los extremos de la barra de desplazamiento . Los dos eventos de tipo BLOCK se generan al pulsar dentro de la barra, a ambos lados del marcador. El evento TRACK se produce al desplazar el marcador de la barra.

Hay métodos para fijar los diferentes parámetros de la barra de desplazamiento, incluyendo el rango, el tamaño del marcador, el número de unidades de desplazamiento, tanto como unidad o como bloque, etc.

Lo que sorprende un poco de este planteamiento, es que parece que está definido de forma general, como si estuviesen definidos pensando en el soporte de una familia de Componentes que operasen sobre la barra de desplazamiento. Sin embargo, en ninguna otra parte de la documentación del JDK se habla de que haya Componentes que utilicen este interfaz de ajuste. Quizá Sun esté pensando en alguna sorpresa.

En el ejemplo java1109.java, se coloca un objeto Scrollbar y un objeto TextField sobre un objeto Frame. Cuando el marcador de la barra de desplazamiento se mueve, utilizando cualquiera de los cinco métodos físicos de movimiento de ese marcador, el valor de la barra, que representa la posición del marcador, se extrae del evento y se presenta en el campo de texto. Además, en cada movimiento del ratón, se presenta información adicional en la pantalla, como es el tipo de evento, el valor del desplazamiento, etc. Si se compila y ejecuta el ejemplo, aparecerá una ventana en la pantalla como la que reproduce la imagen que se muestra a continuación.

En esa imagen se puede observar una cosa que puede resultar un poco chocante, y es que el valor que indica el campo de texto es 50, justo la mitad del rango de la barra; sin embargo, el marcador de la barra está alineado con ese valor por su borde izquierdo. Este comportamiento parece diferente a lo que se acostumbra en otros entornos como Visual Basic o Delphi, en donde el valor corresponde al punto central del marcador. En este caso del JDK, su comportamiento hace que si tenemos un marcador de tamaño finito, los valores superiores no se podrán alcanzar jamás; en este caso, por ejemplo, la barra no podrá sobrepasar el valor 80, cuando su rango va de 0 a 100.

El código del ejemplo, los comentarios incluidos ahondan en el funcionamiento y control de la barra de desplazamiento.

Se puede observar que hay cinco parámetros diferentes que se pueden fijar en el constructor de la barra de desplazamiento, aunque hay disponibles algunos más en la inicialización, como es el BlockIncrement, que no está incluido en la lista de parámetros. Este parámetro debe fijarse utilizando el método setBlockIncrement(). Debería haber valores por defecto para todos estos parámetros, pero no se localiza nada al respecto en la documentación de Sun.

Reiterando lo citado en la presentación del ejemplo, el objeto receptor de eventos de la barra de desplazamiento no está añadido como un ScrollbarListener, sino que está definido y luego añadido como un AdjustmentListener.

Navegador

Home | Anterior | Siguiente | Indice | Correo