lunes, 22 de febrero de 2016

010.- Uso de Spinner - Java y NetBeans


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:

  1. Crea un nuevo proyecto.

  1. Dentro de Source Package crea un Java Package y llamalo paqueteInicial.


  1. Dentro de paqueteInicial crea un JFrame Form y nombralo VentanaInicial.

  1. Dentro de VentanaInicial añade un JSpinner y nombralo spnValor.



  1. Añade una etiqueta con borde y nómbralo etiValorSpinner.
  2. El diseño de la ventana será más o menos así:



  1. 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());


  1. 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.


  1. Ejecuta el proyecto y observa su funcionamiento:




  1. 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.


  1. 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);


  1. 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.

  1. Ejecutemos el proyecto y veamos los valores que puede tomar el JSpinner.




  1. 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);


  1. 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.

  1. Ejecutemos el proyecto otra vez y veamos como cambian los valores del JSpinner.

  1. 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.



4 comentarios:

  1. 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:
    int valor1 = jSpinner1.getValue().hashCode();

    ResponderBorrar
    Respuestas
    1. Intenta lo siguiente:
      Int valor1 = (Integer) jSpinner1.getValue();

      Borrar
  2. Y si quiero obtener una fecha mas su hora?

    ResponderBorrar