Em computação, um Spinner é um elemento de interface gráfica que permite aumentar ou diminuir um valor, geralmente, de um parâmetro numérico (por exemplo, tamanho ou data) de um objeto quando o usuário pressiona os botões do Spinner. O Spinner normalmente é usado em conjunto com caixa de texto que permitem inserir ou editar dados diretamente. Dependendo do gerenciador de janela ou aplicação em uso, existem muitos estilos de apresentação gráfica de Spinner.
NumberModel
É uma classe associada ao Spinner que permite parametrizar um modelo baseado em números.
ListModel
É uma classe associada ao Spinner que permite parametrizar um modelo baseada em Arrays.
DateModel
É uma classe associada ao Spinner que permite parametrizar um modelo baseada em datas.
Calendar
A classe Calendar é uma classe abstrata que fornece métodos para a conversão entre um instante específico no tempo e um conjunto de campos de calendário, como YEAR, MONTH, DAY_OF_MONTH, hora, e assim por diante, e para manipular os campos de calendário, como obter a data da próxima semana.
Exemplo:
Neste programa desenvolvemos três modelos de Spinners baseados em cada um dos seus SpinnerModels e extraímos seus valores para uma saída de tela.
Java
import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Calendar; import java.util.Date; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.SpinnerDateModel; import javax.swing.SpinnerListModel; import javax.swing.SpinnerModel; import javax.swing.SpinnerNumberModel; public class Spinner extends JPanel implements ActionListener { // Declara Labels JLabel titulo; JLabel texto; JLabel numero; JLabel lista; JLabel ano; // Declara Spinners JSpinner spinner1; JSpinner spinner2; JSpinner spinner3; // Declara modelos de Spinner SpinnerModel numeros; SpinnerModel estacao; SpinnerModel data; // Declara Botão JButton botao; // Declara Array String[] tEstacao = {"Primavera", "Verão", "Outono", "Inverno"}; Spinner() { // Cria Componentes titulo = new JLabel("Desenvolvoimento Aberto - JSpinner"); texto = new JLabel("Texto:"); numero = new JLabel("Incio= 1, min= 0, max= 10, alimeta= 1"); lista = new JLabel("Lista de estações do ano"); ano = new JLabel("inicio= ano atual, min= -10, max= +10, alimenta= 1"); // Cria Modelos de Spinner numeros = new SpinnerNumberModel(1, 0, 10, 1); estacao = new SpinnerListModel(tEstacao); // Cria um calendario e assoia a um modelo de spinner Calendar calendario = Calendar.getInstance(); Date dataInicial = calendario.getTime(); calendario.add(calendario.YEAR , -10); Date minData = calendario.getTime(); calendario.add(calendario.YEAR , +20); Date maxData = calendario.getTime(); // Cria modelo de Spinner data = new SpinnerDateModel(dataInicial, minData, maxData , 1); // Cria Spinners spinner1 = new JSpinner(numeros); spinner2 = new JSpinner(estacao); spinner3 = new JSpinner(data); // Cria botão e seu evento on click botao = new JButton("OK"); botao.addActionListener(this); // Cria um Layout GridLayout layout = new GridLayout(0,1,5,5); setLayout(layout); // Adiciona componentes ao painel add(titulo); add(texto); add(numero); add(spinner1); add(lista); add(spinner2); add(ano); add(spinner3); add(botao); // Cria uma borda no painel setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); } public void actionPerformed(ActionEvent arg0) { // Evento on click do botão if (arg0.getSource() == botao) { texto.setText("Numero: " + String.valueOf(spinner1.getValue()) + " " + "Texto: " + String.valueOf(spinner2.getValue()) + " " + "Data: " + String.valueOf(spinner3.getValue())); } } private static void mostraGui() { // Cria Formulario, adiciona suas propriedades e associa seus componentes JFrame formulario = new JFrame("Lista de Música"); formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JComponent painel = new Spinner(); painel.setOpaque(true); formulario.setContentPane(painel); formulario.pack(); formulario.setVisible(true); } public static void main(String[] args) { // Cria GUI. javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { mostraGui(); } }); } }