Вы находитесь на странице: 1из 8

Cmo Usar Slider?

Se utiliza un JSlider para permitir que el usuario introduzca un valor numrico limitado por
una valor mximo y un valor mnimo. Mediante la utilizacin de un Slider en vez de text field,
se eliminan errores de entrada.
Aqu tenemos una imagen de una aplicacin que utiliza un Slider para controlar la velocidad de
una animacin.

Intenta esto:
1.

Compila y ejecuta la aplicacin. El fichero fuente es SliderDemo.java. Tambin


necesitars las 16 imgenes del directorio example-swing/imagesque empiezan con
"burger".

2.

Utiliza el Slider para ajustar la velocidad de animacin.

Aqu est el cdigo 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 slo a setPaintTicks(true) no es suficiente).
Para salidas estndard, las etiquetas numricas en la posicin 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 mtodo stateChanged del ChangeListener del
deslizador, cambiando la velocidad de la animacin.

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 animacin se para.
Observa que el mtodo stateChanged slo cambia la velocidad de la animacin
si getValueIsAdjusting devuelve false. Muchos eventos change se disparan cuando el
usuario mueve el deslizador. Este programa slo est interesado en el resultado final de la
accin 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 tcnicas.

1.

Llamar a setMajorTickSpacing con un valor distinto de cero. Hacindolo de esta


manera, las etiquetas idendifican el valor de cada marca de pulsacin mayor. Esta es
la tcnica utiliza por SliderDemo.java.

2.

Crear un Hashtable que contenga el valor para cada etiqueta y su posicin. Se


proporciona el Hashtable como un argumento a setLabelTable.
SliderDemo2.java, utiliza esta tcnica.

Aqu est el cdigo 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 cdigo crea explcitamente un Hashtable y lo rellena con los valores de las
etiquetas y sus posiciones. Cada valor de etiqueta debe ser unComponent y en este
programa, son simples etiquetas de texto. Tambin podemos utilizar etiquetas con
iconos. Si queremos etiquetas numricas posicionadas a intervalor especficos,
podemos utilizar el mtodo createStandardLabels de JSlider.

El API Slider
Las siguiente tablas listan los mtodos y constructores ms utilizados de JSlider. Otros
mtodos interesantes son definidos por las clases JComponent yComponent.

Ajuste fino de la Apariencia del Deslizador

Mtodo
void setValue(int)
int getValue()
void
setOrientation(int)
int getOrientation()

Propsito
Seleciona u obtiene el valor actual del Slider. El marcador del
deslizador est en esta posicin.
Seleciona u obtiene la orientacin del Slider. Los posibles valores son
JSlider.HORIZONTAL o JSlider.VERTICAL

void
Seleciona u obtiene si el mximo se muestra a la izquierda en un
setInverted(boolean) deslizador horizontal o abajo en uno vertical, por lo tanto invierte el
boolean getInverted() rango del deslizador.
void setMinimum(int)
int getMinimum()
Seleciona u obtiene los valores mximos o mnimos del deslizador.
void setMaximum(int) Juntos selecionan u obtienen el rango del deslizador.
int getMaximum()
void
setMajorTickSpacing(i
nt)
int
getMajorTickSpacing(
)

Seleciona u obtiene el rango entre marcas mayores y menores.


Debemos llamar a setPaintTicks(true) para que aparezcan las
void
setMinorTickSpacing(i marcas.
nt)
int
getMinorTickSpacing(
)
void
setPaintTicks(boolean
)
Seleciona u obtiene si se dibujan las marcas en el deslizador.
boolean
getPaintTicks()

void
setLabelTable(Diction
ary)
Dictionary
getLabelTable()

Seleciona u obtiene las etiquetas para el deslizador. Debemos llamar


a setPaintLabels(true) para que aparezcan las
etiquetas.createStandardLabels es un mtodo de conveniencia
para crear un conjunto de etiquetas estndard.

void
setPaintLabels(boolea Seleciona u obtiene si se dibujan las etiquetas de un deslizador. Las
n)
etiquetas se seleccionan con setLabelTable o configurando el
boolean
espaciado entre marcas mayores.
getPaintLabels()

Aprendiendo un uso Bsico del JSlider.


A toda persona que se inserte por primera vez en el mundo de la GUI de java, se le
es complicado ejecutar cmodamente el uso de los componentes de la swing, y uno
como esta pasando pas por problemas similares, y como siempre es bueno ayudar
a quien lo necesita presentaremos a continuacin un muy simple tutorial sobre dos
componentes del SWING en java, tomando en cuenta que quien este leyendo tiene
conocimientos previos en programar en java, nos centraremos solamente en los
componentes JSlider y JPRogressBar.
Nuestra primera labor en este tutorial ser llegar a esta interfaz:

Primero construyamos una clase que llamaremos JSlider, e importamos todas las
clases que usaremos:

_ javax.swing.*
_javax.swing.event.*
_java.awt.*
_java.awt.event.*
Nota: tambin importaremos la clase JSlider y JFrame aunque estas vengan en
javax.swing.* y javax.swing.* respectivamente, por si a alguien le causa problemas
(como a nosotros). Todo esto debiera quedar as:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JSlider;
import javax.swing.JFrame;
public class Slider{
public static void main(String[] args) {
//cdigo
}
Ahora en la seccin de //cdigo se realizara todo lo que tenga que ver con nuestro
JSlider, y los detalles para poder verlos en una ventana como en la imagen anterior.
Crearemos rpidamente un JFrame, un Jpanel para poder pegar y visualizar
nuestro JSlider (Como se dijo antes, solo explicaremos lo que tenga q ver con el
JSlider).

//cdigo:
JFrame ventana = new JFrame("COme On!!");
ventana.setSize(400, 400);
JPanel panel = new JPanel();
//Crearemos nuestro JSlider a continuacin, cada lnea con una breve descripcin,
luego se explicara con ms //detalles
slider = new JSlider(JSlider.VERTICAL, 0, 100, 25); /*(posicin vertical, comienza,
termina, donde comienza al iniciar programa)*/
slider.setInverted(false); //se invierte el relleno del JSlider (desde donde comienza)
slider.setPaintTicks(true); //las rayitas que marcan los nmeros
slider.setMajorTickSpacing(25); // de cuanto en cuanto los nmeros en el slider
slider.setMinorTickSpacing(5); //las rayitas de cuanto en cuanto
slider.setPaintLabels(true); //si se ve los nmeros del slider
slider.addChangeListener(new MiAccion()); //Agrega un escuchador al slider creado,
lo cual se usara luego
/*Ahora, aunque no pertenece a la clase JSlider, crearemos un JLabel en el cul se
mostrara el numero en el cual se encuentre el slider en ese momento*/
label = new JLabel("LEts Go!!"); /*Crea un JLabel el cual muestra el numero en el
que esta el JSlider y de inicia con la frase LEts Go!! */
Explicaremos un poco ms detallado el constructor presente y cada mtodo (el
mtodo se encontrara en cursiva):
Constructor:
slider = new JSlider(JSlider.VERTICAL, 0, 100, 25): Se inicializa el objeto del JSlider
con nombre slider con los siguientes parmetro: _JSlider.VERTICAL, este parmetro
especifica la forma del nuestro slider si se crea en forma Vertical u Horizontal
(JSlider.HORIZONTAL).

*0, el segundo parmetro indica el tamao mnimo de el JSlider.


*100, el tercer parmetro indica el tamao mximo de el JSlider.
*25, el cuarto parmetro indica la posicin en la cual se inicia el JSlider.
Mtodos:
_ slider.setPaintLabels(true): Muestra una etiqueta con nmeros designados en el
mtodo setMajorTickSpacing(25) el cual el numero 25 indica mostrar numero de 25
en 25 partiendo del minimo establecido en el JSlider.
_ slider.setInverted(false) : Recibe una variable Booleana (true ofalse), dependiendo
cual sea su parmetro el JSlider tendr su mnimo en un lado o el otro.
_ slider.setPaintTicks(true): Este mtodo muestra Ticks (lneas) que delimitan se
segn los mtodos setMajorTickSpacing() ysetMinorTickSpacing().
_ slider.setMinorTickSpacing(5): Este mtodo muestra Ticks (lneas), los cuales
equivalen a avanzar de 5 en 5 en este caso (se necesita mtodo setPaintTicks() con
parmetro true).
_ slider.setMajorTickSpacing(25): Muestra Ticks mayores, con un numero al lado,
de 25 en 25, en este caso, partiendo del valor mnimo dado al JSlider (si el
mtodo setPaintTicks() esta con parmetro false, solo se mostraran el numero
correspondiente).
Luego de haber explicado los mtodos usados en nuestro JSlider (no son los nicos
mtodos existentes a todo esto), continuaremos con el fin del programa que consiste
en: Luego de haber creado nuestro JSlider, y nuestro JLabel, lo siguiente ser
agregar estos elementos al JPanel creado anteriormente, para luego agregar el
JPanel a la ventana (JFrame), para poder visualizar nuestra creacin.
Y esto se realiza con el siguiente cdigo:
panel.add(label); // add sirve para agregar nuestro label al panel creado
panel.add(slider); /*Ahora ya estn agregados tanto el label como nuestro slider al
panel*/
Entonces, que es lo que segua luego de haber agregado lo anterior?? Sabes??
Bueno, si no te acuerdas es agregar nuestro panel (JPanel) a la ventana (JFrame),
puesto que gracias a est podemos ver nuestro JSlider en accin, y tambin otros
mtodos pero para la ventana (JFrame), lo cul no se explicara ya saben el porque, y
nuevamente, esto se realiza Con el siguiente cdigo:
ventana.add(panel); //Agrega panel a la ventana(JFrame).
ventana.setVisible(true); //Hace que la ventana sea visible a nuestros ojos.
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /*Al presionar la X de
la ventana el programa terminara (al cerrar la ventana).*/
Luego de haber generado el cdigo para el JSlider, se proceder a crear el mtodo, el
cul logra hacer q nuestra label se valla actualizando y lanzando el numero en la cul
se valla posicionando nuestro JSlider.
public static class MiAccion implements ChangeListener{ /*aqu se empieza a crear el
mtodo. */
public void stateChanged(ChangeEvent e){
int evaluo = slider.getValue(); /*toma el valor que tiene el slider y lo guarda como
entero */
String nose = Integer.toString(evaluo); /*En nose guarda nuestro entero evaluo
como un string */
label.setText(nose); /*actualiza nuestro label al valor en el que se encuentra nuestro
JSlider */
}
}

Luego de haber visto por partes nuestro cdigo vamos a ajustar nuestros ltimos
detalles en el cdigo completo.
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JSlider;
import javax.swing.JFrame;
public class Slider{
static JSlider slider; /*se deben instanciar antes para poder usarlos en el mtodo
creado mas abajo */
static JLabel label; /*y a la vez estaticos (static) tambin para poder ser usados en
nuestro mtodo creado. */
public static void main(String[] args){
JFrame ventana = new JFrame("COme On!!");
ventana.setSize(400, 400);
JPanel panel = new JPanel();
slider = new JSlider(JSlider.VERTICAL, 0, 100, 25);
slider.setInverted(false);
slider.setPaintTicks(true); slider.setMajorTickSpacing(25);slider.setMinorTickSp
acing(5); slider.setPaintLabels(true);
slider.addChangeListener(new MiAccion());
label = new JLabel("LEts Go!!");
panel.add(label);
panel.add(slider);
ventana.add(panel);
ventana.setVisible(true);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static class MiAccion implements ChangeListener{
public void stateChanged(ChangeEvent e){
int evaluo = slider.getValue();
String nose = Integer.toString(evaluo);
label.setText(nose);
}
}
}
Luego de completo nuestro cdigo, solo queda por parte de ustedes ejercitar, pueden
ir cambiando las variables, y ahora les dejaremosla API del JSlider, donde podrn ver
todos los mtodos e ir implementando sus propias ideas.

Вам также может понравиться