Swing y JFC (Java Foundation Classes)

Se utiliza un JSlider para permitir que el usuario introduzca un valor num�rico limitado por una valor m�ximo y un valor m�nimo. Mediante la utilizaci�n de un Slider en vez de text field, se eliminan errores de entrada.

Aqu� tenemos una imagen de una aplicaci�n que utiliza un Slider para controlar la velocidad de una animaci�n.

Intenta esto:
  1. Compila y ejecuta la aplicaci�n. El fichero fuente es SliderDemo.java. Tambi�n necesitar�s las 16 im�genes del directorio example-swing/images que empiezan con "burger".
  2. Utiliza el Slider para ajustar la velocidad de animaci�n.

Aqu� est� el c�digo de SliderDemo.java que crea el Slider el programa anterior.

JSlider framesPerSecond = new JSlider(JSlider.HORIZONTAL, 0, 30, FPS_INIT);
framesPerSecond.addChangeListener(new SliderListener());
framesPerSecond.setMajorTickSpacing(10);
framesPerSecond.setMinorTickSpacing(1);
framesPerSecond.setPaintTicks(true);
framesPerSecond.setPaintLabels(true);
framesPerSecond.setBorder(BorderFactory.createEmptyBorder(0,0,10,0));
. . .
//add the slider to the content pane
contentPane.add(framesPerSecond);

Por defecto, el espacio para las marcas mayores y menores es cero. Para ver estas marcas, debemos especificar el espaciado de los ticks mayor o menor (o ambos) a un valor distinto de cero y llamar a setPaintTicks(true) (llamar s�lo a setPaintTicks(true) no es suficiente). Para salidas est�ndard, las etiquetas num�ricas en la posici�n marcas mayores seleccionan el mayor espaciado entre marcas, luego se llama setPaintLabels(true). El programa de ejemplo proporciona la etiqueta para sus deslizadores de esta forma. Sin embargo, las etiquetas del Slider son altamente configurables. Puedes ver un ejemplo en Proporcionar Etiquetas para Deslizadores.

Cuando se mueve el deslizador, se llama al m�todo stateChanged del ChangeListener del deslizador, cambiando la velocidad de la animaci�n.

class SliderListener implements ChangeListener {
    public void stateChanged(ChangeEvent e) {
        JSlider source = (JSlider)e.getSource();
        if (!source.getValueIsAdjusting()) {
	    int fps = (int)((JSlider)e.getSource()).getValue();
	    if (fps == 0) {
	        if (!frozen) stopAnimation();
	    } else {
	        delay = 1000 / fps;
	        timer.setDelay(delay);
	        if (frozen) startAnimation();
	    }
        }
    }
}

Si movemos el deslizador hasta cero, la animaci�n se para.

Observa que el m�todo stateChanged s�lo cambia la velocidad de la animaci�n si getValueIsAdjusting devuelve false. Muchos eventos change se disparan cuando el usuario mueve el deslizador. Este programa s�lo est� interesado en el resultado final de la acci�n del usuario.

.�Porporcionar Etiquetas para Deslizadores

Para mostrar etiquetas en un deslizador, debemos llamar a setPaintLabels(true) y proporcionar un conjunto de etiquetas que indiquen las posiciones y valores para cada etiqueta. Las etiquetas pueden especificarse utilizando una de las siguientes t�cnicas.

  1. Llamar a setMajorTickSpacing con un valor distinto de cero. Haci�ndolo de esta manera, las etiquetas idendifican el valor de cada marca de pulsaci�n mayor. Esta es la t�cnica utiliza por SliderDemo.java.
  2. Crear un Hashtable que contenga el valor para cada etiqueta y su posici�n. Se proporciona el Hashtable como un argumento a setLabelTable.

    SliderDemo2.java, utiliza esta t�cnica.

    Aqu� est� el c�digo de SliderDemo2.java que crea el deslizador.

    //Create the slider
    JSlider framesPerSecond = new JSlider(JSlider.VERTICAL, 0, 30, FPS_INIT);
    framesPerSecond.addChangeListener(new SliderListener());
    framesPerSecond.setMajorTickSpacing(10);
    framesPerSecond.setPaintTicks(true);
    
    //Create the label table
    Dictionary labelTable = new Hashtable();
    labelTable.put( new Integer( 0 ), new JLabel("Stop") );
    labelTable.put( new Integer( 3 ), new JLabel("Slow") );
    labelTable.put( new Integer( 30 ), new JLabel("Fast") );
    framesPerSecond.setLabelTable( labelTable );
    
    framesPerSecond.setPaintLabels(true);
    framesPerSecond.setBorder(BorderFactory.createEmptyBorder(0,0,0,10));
    

    Este c�digo crea expl�citamente un Hashtable y lo rellena con los valores de las etiquetas y sus posiciones. Cada valor de etiqueta debe ser un Component y en este programa, son simples etiquetas de texto. Tambi�n podemos utilizar etiquetas con iconos. Si queremos etiquetas num�ricas posicionadas a intervalor espec�ficos, podemos utilizar el m�todo createStandardLabels de JSlider.

.�El API Slider

Las siguiente tablas listan los m�todos y constructores m�s utilizados de JSlider. Otros m�todos interesantes son definidos por las clases JComponent y Component.

.�Ajuste fino de la Apariencia del Deslizador

M�todo Prop�sito
void setValue(int)

int getValue()

Seleciona u obtiene el valor actual del Slider. El marcador del deslizador est� en esta posici�n.
void setOrientation(int)

int getOrientation()

Seleciona u obtiene la orientaci�n del Slider. Los posibles valores son JSlider.HORIZONTAL o JSlider.VERTICAL
void setInverted(boolean)

boolean getInverted()

Seleciona u obtiene si el m�ximo se muestra a la izquierda en un deslizador horizontal o abajo en uno vertical, por lo tanto invierte el rango del deslizador.
void setMinimum(int)

int getMinimum()

void setMaximum(int)

int getMaximum()

Seleciona u obtiene los valores m�ximos o m�nimos del deslizador. Juntos selecionan u obtienen el rango del deslizador.
void setMajorTickSpacing(int)

int getMajorTickSpacing()

void setMinorTickSpacing(int)

int getMinorTickSpacing()

Seleciona u obtiene el rango entre marcas mayores y menores. Debemos llamar a setPaintTicks(true) para que aparezcan las marcas.
void setPaintTicks(boolean)

boolean getPaintTicks()

Seleciona u obtiene si se dibujan las marcas en el deslizador.
void setLabelTable(Dictionary)

Dictionary getLabelTable()

Seleciona u obtiene las etiquetas para el deslizador. Debemos llamar a setPaintLabels(true) para que aparezcan las etiquetas. createStandardLabels es un m�todo de conveniencia para crear un conjunto de etiquetas est�ndard.
void setPaintLabels(boolean)

boolean getPaintLabels()

Seleciona u obtiene si se dibujan las etiquetas de un deslizador. Las etiquetas se seleccionan con setLabelTable o configurando el espaciado entre marcas mayores.

COMPARTE ESTE ARTÍCULO

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