¿Cómo Usar Slider? 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 feld, 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.
ompila y e!ecu ompila e!ecuta ta la aplica aplicación. ción. "l #c$ero #c$ero %uente es SliderDemo.java. &am'ién &am'ién necesitarás las 1( imágenes del directorio example-swingimagesque empiezan con )!"rger ).
*.
+tiliza +tiliz a el Slider para a!ust a!ustar ar la veloc velocidad idad de de animaci animación. ón.
Aquí está el código de SliderDemo.java que crea el Slider el programa anterior.
Slider %rames-erSe %rames-erSecond cond ne/ Slider0Slider Slider0Slider.234526& .234526&A7, A7, 8, 98, :-S;464&<= :-S;464&<= %rames-erSecond.add$ange7i %rames-e rSecond.add$ange7istener0ne/ stener0ne/ Slider7isten Slider7istener0<<= er0<<= %rames-erSecond.setMa!or %rames-e rSecond.setMa!or&ic>Spacin &ic>Spacing018<= g018<= %rames-erSecond.setMin %rames-e rSecond.setMinor&ic>Spaci or&ic>Spacing01<= ng01<= %rames-erSecond.set-aint&ic>s0true<= %rames-erSecond.set-aint7a'els0true<= %rames-erSecond.set?order0?order:actory.create"mpty?order08,8,18,8<<= . . . @@add t$e slider to t$e content pane content-ane.add0%rames-erS content-ane.add0%rames-erSecond<= econd<=
-or de%ecto, el espacio para las marcas mayores y menores es cero. -ara ver estas marcas, de'emos especi#car el espaciado de los tic>s mayor o menor 0o am'os< a un valor distinto de cero y llamar a set#aint$i%&s'tr"e( 0llamar sólo a set#aint$i%&s'tr"e( no es su#ciente<. -ara salidas estándard, las etiquetas numéricas en l a posición marcas mayores seleccionan el mayor espaciado entre marcas, luego se llama set#aint)a!els'tr"e(. "l programa de e!emplo proporciona la etiqueta para sus deslizadores de esta %orma. Sin em'argo, las etiquetas del Slider son altamente con#gura'les. -uedes ver un e!emplo en #ropor%ionar *ti+"etas para Desli,adores . uando se mueve el deslizador, se llama al método stateCanged del Cange)istener del deslizador, cam'iando la velocidad de la animación.
class Slider7istener implements $ange7istener pu'lic void state$anged0$ange"vent e< Slider source 0Slider
#orpor%ionar *ti+"etas para Desli,adores -ara mostrar etiquetas en un deslizador, de'emos llamar a set#aint)a!els'tr"e( y proporcionar un con!unto de etiquetas que indiquen las posiciones y valores para cada etiqueta. 7as etiquetas pueden especi#carse utilizando una de las siguientes técnicas.
1.
7lamar a set1ajor$i%&Spa%ing con un valor distinto de cero. aciéndolo de esta manera, las etiquetas idendi#can el valor de cada marca de pulsación mayor. "sta es la técnica utiliza por SliderDemo.java.
*.
rear un 2asta!le que contenga el valor para cada etiqueta y su posición. Se proporciona el 2asta!le como un argumento a set)a!el$a!le. SliderDemo3.java, utiliza esta técnica.
Aquí está el código de SliderDemo3.java que crea el deslizador.
@@reate t$e slider Slider %rames-erSecond ne/ Slider0Slider.C"3&4A7, 8, 98, :-S;464&<= %rames-erSecond.add$ange7istener0ne/ Slider7istener0<<= %rames-erSecond.setMa!or&ic>Spacing018<= %rames-erSecond.set-aint&ic>s0true<= @@reate t$e la'el ta'le Eictionary la'el&a'le ne/ as$ta'le0<= la'el&a'le.put0 ne/ 4nteger0 8 <, ne/ 7a'el0)Stop)< <= la'el&a'le.put0 ne/ 4nteger0 9 <, ne/ 7a'el0)Slo/)< <= la'el&a'le.put0 ne/ 4nteger0 98 <, ne/ 7a'el0):ast)< <= %rames-erSecond.set7a'el&a'le0 la'el&a'le <= %rames-erSecond.set-aint7a'els0true<= %rames-erSecond.set?order0?order:actory.create"mpty?order08,8,8,18<<=
"ste código crea explícitamente un 2asta!le y lo rellena con los valores de las etiquetas y sus posiciones. ada valor de etiqueta de'e ser un Component y en este programa, son simples etiquetas de texto. &am'ién podemos utilizar etiquetas con iconos. Si queremos etiquetas numéricas posicionadas a i ntervalor especí#cos, podemos utilizar el método %reateStandard)a!els de JSlider.
*l /#I Slider 7as siguiente ta'las listan los métodos y constructores más utilizados de JSlider. 2tros métodos interesantes son de#nidos por las clases JComponent yComponent .
A!uste #no de la Apariencia del Eeslizador
14todo void setal"e'int( int getal"e'( void set5rientation'int( int get5rientation'(
#ropósito
Seleciona u o'tiene el valor actual del Sli der. "l marcador del deslizador está en esta posición. Seleciona u o'tiene la orientación del Slider. 7os posi'les valores son Slider.234526&A7 o Slider.C"3&4A7
void Seleciona u o'tiene si el máximo se muestra a la izqui erda en un setInverted'!oolean( deslizador $orizontal o a'a!o en uno vertical, por l o tanto invierte el !oolean getInverted'( rango del deslizador. void set1inim"m'int( int get1inim"m'(
Seleciona u o'tiene los valores máximos o mínimos del deslizador. void set1axim"m'int( untos selecionan u o'tienen el rango del deslizador. int get1axim"m'( void set1ajor$i%&Spa%ing'i nt( int get1ajor$i%&Spa%ing' (
Seleciona u o'tiene el rango entre marcas mayores y menores. Ee'emos llamar a set#aint$i%&s'tr"e( para que aparezcan las void set1inor$i%&Spa%ing'i marcas. nt( int get1inor$i%&Spa%ing' ( void set#aint$i%&s'!oolean ( Seleciona u o'tiene si se di'u!an las marcas en el deslizador. !oolean get#aint$i%&s'(
void set)a!el$a!le'Di%tion ar6( Di%tionar6 get)a!el$a!le'(
Seleciona u o'tiene las etiquetas para el deslizador. Ee'emos llamar a set#aint)a!els'tr"e( para que aparezcan las etiquetas.%reateStandard)a!els es un método de conveniencia para crear un con!unto de etiquetas estándard.
void set#aint)a!els'!ooleaSeleciona u o'tiene si se di'u!an las etiquetas de un deslizador. 7as n( etiquetas se seleccionan con set)a!el$a!le o con#gurando el !oolean espaciado entre marcas mayores. get#aint)a!els'(
Aprendiendo un uso Básico del JSlider. A toda persona que se inserte por primera vez en el mundo de la GUI de java, se le es complicado ejecutar cómodamente el uso de los componentes de la “sin!", # uno como esta pasando pasó por pro$lemas similares, # como siempre es $ueno a#udar a quien lo necesita presentaremos a continuación un mu# simple tutorial so$re dos componentes del “S%I&G" en java, tomando en cuenta que quien este le#endo tiene conocimientos previos en pro!ramar en java, nos centraremos solamente en los componentes JSlider # J'(o!ressBar. &uestra primera la$or en este tutorial será lle!ar a esta inter)az*
'rimero constru#amos una clase que llamaremos “JSlider", e importamos todas las clases que usaremos*
+ java.sin!. +java.sin!.event. +java.at. +java.at.event.&ota* tam$in importaremos la clase JSlider # J/rame aunque estas ven!an en java.sin!.- # java.sin!.- respectivamente, por si a al!uien le causa pro$lemas 0como a nosotros1. 2odo esto de$iera quedar as3* import java.sin!.-4 import java.sin!.event.-4 import java.at.-4 import java.at.event.-4 import java.sin!.JSlider4 import java.sin!.J/rame4 pu$lic class Slider5 pu$lic static void main0Strin!67 ar!s1 5 88códi!o 9 A:ora en la sección de “88códi!o" se realizara todo lo que ten!a que ver con nuestro JSlider, # los detalles para poder verlos en una ventana como en la ima!en anterior. ;rearemos rápidamente un JFrame, un Jpanel para poder pe!ar # visualizar nuestro JSlider 0;omo se dijo antes, solo eplicaremos lo que ten!a q ver con el JSlider1.
88códi!o* J/rame ventana < ne J/rame0=;>me >n??=14 ventana.setSize0@, @14 J'anel panel < ne J'anel014 88;rearemos nuestro JSlider a continuación, cada l3nea con una $reve descripción, lue!o se eplicara con más 88detalles slider < ne JSlider0JSlider.C(2I;AD, , E, F14 8-0posición vertical, comienza, termina, donde comienza al iniciar pro!rama1-8 slider.setInverted0)alse14 88se invierte el relleno del JSlider 0desde donde comienza1 slider.set'aint2icHs0true14 88las ra#itas que marcan los nmeros slider.setajor2icHSpacin! 0F14 88 de cuanto en cuanto los nmeros en el slider slider.setinor2icHSpacin! 014 88las ra#itas de cuanto en cuanto slider.set'aintDa$els0true14 88si se ve los nmeros del slider slider.add;:an!eDistener 0ne iAccion0114 88A!re!a un escuc:ador al slider creado, lo cual se usara lue!o 8-A:ora, aunque no pertenece a la clase JSlider, crearemos un JDa$el en el cuál se mostrara el numero en el cual se encuentre el slider en ese momento-8 la$el < ne JDa$el0=DCts Go??K=14 8-;rea un JDa$el el cual muestra el numero en el que esta el JSlider # de inicia con la )rase DCts Go??K -8 Cplicaremos un poco más detallado el constructor presente # cada mtodo 0el mtodo se encontrara en cursiva): ;onstructor* slider < ne JSlider( JSlider.VERTICAL, 0, 00, !" )* Se inicializa el o$jeto del JSlider con nom$re slider con los si!uientes parámetro* + JSlider.VERTICAL, este parámetro especi)ica la )orma del nuestro slider si se crea en )orma ertical u Lorizontal 0 JSlider.#$RI%$&TAL1.
-0, el se!undo parámetro indica el tamaMo m3nimo de el JSlider. '00, el tercer parámetro indica el tamaMo máimo de el JSlider. -!" , el cuarto parámetro indica la posición en la cual se inicia el JSlider. todos* + slider.seainLa*els( rue )* uestra una etiqueta con nmeros desi!nados en el mtodo se+a-rTicSpacin/( !" ) el cual el numero F indica mostrar numero de F en F partiendo del minimo esta$lecido en el JSlider. + slider.seInvered ( alse ) * (eci$e una varia$le Booleana 0 rue oalse1, dependiendo cual sea su parámetro el JSlider tendrá su m3nimo en un lado o el otro. + slider.seainTics( rue )* Cste mtodo muestra 2icHs 0l3neas1 que delimitan se se!n los mtodos se+a-rTicSpacin/() #se+in-rTicSpacin/(). + slider.se+in-rTicSpacin/( " ) * Cste mtodo muestra 2icHs 0l3neas1, los cuales equivalen a avanzar de " en " en este caso 0se necesita mtodo seainTics() con parámetro rue). + slider.se+a-rTicSpacin/( !" )* uestra 2icHs ma#ores, con un numero al lado, de !" en !" , en este caso, partiendo del valor m3nimo dado al JSlider 0si el mtodo seainTics() esta con parámetro )alse, solo se mostraran el numero correspondiente1. Due!o de :a$er eplicado los mtodos usados en nuestro JSlider 0no son los nicos mtodos eistentes a todo esto1, continuaremos con el )in del pro!rama que consiste en* Due!o de :a$er creado nuestro JSlider, # nuestro JDa$el, lo si!uiente será a!re!ar estos elementos al J'anel creado anteriormente, para lue!o a!re!ar el J'anel a la ventana 0J/rame1, para poder visualizar nuestra creación. N esto se realiza con el si!uiente códi!o* panel.add0la$el14 88 add sirve para a!re!ar nuestro la$el al panel creado panel.add0slider14 8-A:ora #a están a!re!ados tanto el la$el como nuestro slider al panel-8 Cntonces, que es lo que se!u3a lue!o de :a$er a!re!ado lo anteriorOO Sa$esOO Bueno, si no te acuerdas es a!re!ar nuestro panel 0J'anel1 a la ventana 0J/rame1, puesto que !racias a está podemos ver nuestro JSlider en acción, # tam$in otros mtodos pero para la ventana 0J/rame1, lo cuál no se eplicara #a sa$en el porque, # nuevamente, esto se realiza ;on el si!uiente códi!o* ventana.add0panel14 88A!re!a panel a la ventana0J/rame1. ventana.setisi$le0true14 88Lace que la ventana sea “visi$le a nuestros ojos". ventana.setPe)ault;lose>peration0J/rame.CQI2+>&+;D>SC14 8-Al presionar la Q de la ventana el pro!rama terminara 0al cerrar la ventana1.-8 Due!o de :a$er !enerado el códi!o para el JSlider, se procederá a crear el mtodo, el cuál lo!ra :acer q nuestra la$el se valla actualizando # lanzando el numero en la cuál se valla posicionando nuestro JSlider. pu$lic static class iAccion implements ;:an!eDistener5 8-aqu3 se empieza a crear el mtodo. -8 pu$lic void state;:an!ed0;:an!eCvent e15 int evaluo < slider.!etalue014 8-toma el valor que tiene el slider # lo !uarda como entero -8 Strin! nose < Inte!er.toStrin!0evaluo14 8-Cn nose !uarda nuestro entero evaluo como un strin! -8 la$el.set2et0nose14 8-actualiza nuestro la$el al valor en el que se encuentra nuestro JSlider -8 9 9
Due!o de :a$er visto por partes nuestro códi!o vamos a ajustar nuestros ltimos detalles en el códi!o completo. import java.sin!.-4 import java.sin!.event.-4 import java.at.-4 import java.at.event.-4 import java.sin!.JSlider4 import java.sin!.J/rame4 pu$lic class Slider5 static JSlider slider4 8-se de$en instanciar antes para poder usarlos en el mtodo creado mas a$ajo -8 static JDa$el la$el4 8-# a la vez estaticos 0static1 tam$in para poder ser usados en nuestro mtodo creado. -8 pu$lic static void main0Strin!67 ar!s15 J/rame ventana < ne J/rame0=;>me >n??=14 ventana.setSize0@, @14 J'anel panel < ne J'anel014 slider < ne JSlider0JSlider.C(2I;AD, , E, F14 slider.setInverted0)alse14 slider.set'aint2icHs0true14 slider.setajor2icHSpacin!0F14slider.setinor2icHSp acin!014 slider.set'aintDa$els0true14 slider.add;:an!eDistener 0ne iAccion0114 la$el < ne JDa$el0=DCts Go??K=14 panel.add0la$el14 panel.add0slider14 ventana.add0panel14 ventana.setisi$le0true14 ventana.setPe)ault;lose>peration0J/rame.CQI2+>&+;D>SC14 9 pu$lic static class iAccion implements ;:an!eDistener5 pu$lic void state;:an!ed0;:an!eCvent e15 int evaluo < slider.!etalue014 Strin! nose < Inte!er.toStrin!0evaluo14 la$el.set2et0nose14 9 9 9 Due!o de completo nuestro códi!o, solo queda por parte de ustedes ejercitar, pueden ir cam$iando las varia$les, # a:ora les dejaremosla A'I del JSlider, donde podrán ver todos los mtodos e ir implementando sus propias ideas.