A continuación explico cómo usar los objetos Spinner:
La
clase JSpinner nos permite crear cuadros como el siguiente:
Estos
elementos son muy comunes en los programas. A través de los dos botones
triangulares se puede hacer que el valor del cuadro aumente o disminuya.
También se puede escribir directamente un valor dentro del cuadro.
A continuación se muestra las características más interesantes de los JSpinner y como configurarlas:
- Crea un nuevo
proyecto.
- Dentro
de Source Package crea un Java Package y
llamalo paqueteInicial.
- Dentro de paqueteInicial crea
un JFrame Form y nombralo VentanaInicial.
- Dentro de VentanaInicial añade un JSpinner y nombralo spnValor.
- Añade una
etiqueta con borde y nómbralo etiValorSpinner.
- El diseño de la
ventana será más o menos así:
- Interesa que
cuando cambie el valor del JSpinner (ya sea porque se pulsaron los botones
triangulares o porque se escribió dentro) aparezca el valor
correspondiente dentro de la etiqueta. Para esto, se tiene que programar
el evento stateChanged del
JSpinner.
Programe el siguiente código en el evento stateChanged:
etiValorSpinner.setText("El valor del Spinner es:
" + spnValor.getValue().toString());
- Como podrás ver,
lo que hace el programa es recoger el valor que tiene el JSpinner a través
del método getValue y luego se
lo asigna a la etiqueta con el clásico setText.
(Similar a los deslizadores).
Se debe tener en cuenta que el valor devuelto no es un número ni una
cadena, por lo que en el ejemplo se ha usado el método toString() para
convertirlo a una cadena.
- Observa como
los valores del JSpinner aumentan o disminuyen en 1. Por otro lado, no
parece haber un límite para los valores del JSpinner.
La pregunta ahora es: ¿Se puede modificar el contenido del JSpinner de
forma que tenga unos valores específicos? La respuesta es sí. Veamos como
hacerlo.
- Ingresamos al
código del programa y dentro del constructor, añade este código debajo de initComponents:
SpinnerNumberModel
modeloSpinner = new SpinnerNumberModel();
modeloSpinner.setMaximum(20);
modeloSpinner.setMinimum(0);
spnValor.setModel(modeloSpinner);
- Explicaremos
este código:
10.1.
Al igual
que los JList y los JComboBox, los JSpinner son objetos que contiene otro
objeto “modelo”, y es el objeto “modelo” el que contiene los números
visualizados en el JSpinner.
10.2.
En el código
anterior se crea un “modelo” para el JSpinner, seguidamente se definen los
valores que contendrá, y luego se asigna al JSpinner.
10.3.
La
primera línea crea un “modelo” llamado modeloSpinner.
Los modelos de los JSpinner son del tipo SpinnerNumberModel.
Se Necesitará incluir el import correspondiente (atento a la bombilla que
aparece a la izquierda de la línea de código).
10.4.
En la
segunda línea se define como valor máximo del modelo el 20, a través de su método
setMaximum.
10.5.
En la
tercera línea se define como valor mínimo del modelo el 0, a través de su
método setMinimum.
10.6.
Finalmente
se asigna el modelo creado al JSpinner, a través de su método setModel.
10.7.
Este
código, hará que el JSpinner muestre sólo los valores comprendidos entre 0 y
20.
- Ejecutemos el proyecto
y veamos los valores que puede tomar el JSpinner.
- Ahora cambiemos
el código del constructor por este otro. (Observa que solamente se ha agregado
una línea):
SpinnerNumberModel
modeloSpinner = new SpinnerNumberModel();
modeloSpinner.setMaximum(20);
modeloSpinner.setMinimum(0);
modeloSpinner.setStepSize(2);
spnValor.setModel(modeloSpinner);
- La nueva línea agregada
es:
modeloSpinner.setStepSize(2);
Esta línea usa un método setStepSize() del modelo del JSpinner que
permite definir el valor de cambio del JSPinner. Dicho de otro modo, esta línea
hace que los valores del JSpinner cambien de 2 en 2.
- Ejecutemos el
proyecto otra vez y veamos como cambian los valores del JSpinner.
- El modelo de
los JSpinner tiene también un método llamado setValue que permite asignar un valor inicial al modelo. Prueba
este método para hacer que el JSpinner muestre desde el principio el valor
10.
CONCLUSIÓN
Los JSpinners son objetos que
permiten seleccionar un número, ya sea escribiéndolo en el recuadro, o bien a
través de dos botones triangulares que permiten aumentar o disminuir su valor.
Los JSpinners son objetos con
“modelo”. Es decir, este objeto contiene a su vez otro objeto “modelo” que es
el que realmente contiene los datos.
Datos è Modelo è JSpinner
Para definir el contenido del
JSpinner es necesario crear un modelo del tipo SpinnerNumberModel. Se le asigna
al modelo los números deseados, y finalmente se une el modelo con el JSpinner.
El objeto modelo del JSpinner permite
definir su valor mínimo, su valor máximo, su valor inicial así como su valor de
incremento.
En todas las búsquedas que he hecho, siempre aparece para concatenar el valor del Spinner con un String, sin embargo si solo quiero obtener el valor del int el codigo es el siguiente:
ResponderBorrarint valor1 = jSpinner1.getValue().hashCode();
Intenta lo siguiente:
BorrarInt valor1 = (Integer) jSpinner1.getValue();
Muy bueno gracias por la explicación
ResponderBorrarY si quiero obtener una fecha mas su hora?
ResponderBorrar