Kelas JSpinner adalah salah satu komponen grafis Java sebagai input data (baca artikel Mengenal Kelas JSpinner Di Pemrograman Java). Obyek kelas JSpinner menampilkan input berupa nilai angka. Namun, bila diinginkan, Anda juga bisa menampilkan input data berupa obyek lain seperti nama hari atau bulan menggunakan spinner model. Spinner model terdiri dari tiga kelas, salah satunya kelas SpinnerListModel. Kelas SpinnerListModel adalah kelas turunan dari kelas AbstrakSpinnerModel yang mengimplementasi interface SpinnerModel.

Kelas SpinnerListModel digunakan untuk menampilkan rangkaian nilai string di obyek spinner, misalnya nama hari, bulan, jenjang pendidikan dan sebagainya. Nilai string di obyek kelas SpinnerListModel disimpan di dalam kelas java.util.List. Artikel ini tidak membahas kelas java.util.List. Anda dapat memperoleh keterangan rinci kelas ini dari internet. Tabel di bawah ini adalah daftar kontruktor kelas SpinnerListModel yang digunakan untuk mengkonstruksi obyek SpinnerListModel.

Tabel konstruktor kelas JSpinnerListModel

Konstruktor Keterangan
SpinnerListModel() Mengkonstruksi obyek SpinnerListModel dengan nilai berupa string kosong.
SpinnerListModel(List value) Mengkonstruksi obyek SpinnerListModel dengan nilai string yang tersimpan di list.
SpinnerListModel(Object[] value) Mengkonstruksi obyek SpinnerListModel dengan nilai string yang tersimpan di larik.

Contoh program berikut ini mendemonstrasikan bagaimana cara untuk membuat obyek spinner yang menampilkan obyek string warna. Spinner dapat memicu change event ketika salah satu dari dua anak panah kecil diklik untuk menavigasi nilai spinner. Ketika nilai obyek spinner berubah, warna latar (background) dari obyek panel akan berubah menyesuaikan nilai string warna yang ditampilkan obyek spinner.

// Nama file : DemoSpinnerListModel.java
// Mendemonstrasikan penggunaan kelas SpinnerListModel

// Mengimpor kelas
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;

public class DemoSpinnerListModel extends JFrame {

   private JSpinner spinner;
   private SpinnerModel spinnerListModel;
   private JPanel panel;

   public DemoSpinnerListModel() {

      // Membuat larik warna
      String[] warna = {"Yellow", "Magenta", "Green", "Cyan”, "Orange", "Blue",
         "Pink", "Red", "Black"};

      // Membuat spinner dengan nilai yang tersimpan di list
      spinnerListModel = new SpinnerListModel(warna);
      spinner = new JSpinner(spinnerListModel);

      // Merubah warna panel menyesuaikan nilai spinner awal
      panel = new JPanel();
      spinner.setValue(new String("Yellow"));
      panel.setBackground(Color.YELLOW);

      getContentPane().add(spinner, BorderLayout.PAGE_START);
      getContentPane().add(panel, BorderLayout.CENTER);

      // Menangani event yang dipicu obyek spinner
      spinner.addChangeListener(new ChangeListener() {
         public void stateChanged(ChangeEvent ce) {

            String strWarna = (String) spinner.getValue();
            if (strWarna == "Yellow")
               panel.setBackground(Color.YELLOW);
            else if (strWarna == "Magenta")
               panel.setBackground(Color.MAGENTA);
            else if (strWarna == "Green")
               panel.setBackground(Color.GREEN);
            else if (strWarna == "Cyan")
               panel.setBackground(Color.CYAN);
            else if (strWarna == "Orange")
               panel.setBackground(Color.ORANGE);
            else if (strWarna == "Blue")
               panel.setBackground(Color.BLUE);
            else if (strWarna == "Pink")
               panel.setBackground(Color.PINK);
            else if (strWarna == "Red")
               panel.setBackground(Color.RED);
            else
               panel.setBackground(Color.BLACK);
         }
      });
   }

    public static void main(String[] args) {
       DemoSpinnerListModel frame = new DemoSpinnerListModel();
       frame.setTitle("Kelas DemoSpinnerListModel");
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setSize(280, 150);
       frame.setVisible(true);
   }
}
Menggunakan spinner model kelas SpinnerListModel

Baris nomor 18 adalah pernyataan untuk mendeklarasikan larik warna yang mempunyai sembilan nilai string yang mewakili nama warna berbeda. Obyek larik warna dijadikan sebagai argumen parameter konstruktor kelas SpinnerListModel. Obyek spinner list model yang telah dikonstruksi digunakan sebagai argumen parameter konstruktor kelas JSpinner yang menampilkan daftar nama warna (baris nomor 22 dan 23).

Baris nomor 27 adalah pernyataan menentukan warna yang akan ditampilkan spinner pertama kali. Anda dapat menggunakan metoda setValue kelas JSpinner. Karena metoda ini mempunyai parameter tipe kelas Object, maka argumen yang diberikan harus dalam bentuk obyek. Anda tentu ingat bahwa string adalah juga kelas Java. Kelas juga dijadikan sebagai tipe variabel yang disebut tipe acuan, termasuk adalah kelas String. Nilai string warna yang ditampilkan digunakan sebagai acuan menentukan warna latar dari obyek panel yang sebelumnya dikonstruksi dengan memberi argumen berupa konstanta warna yang bersesuaian di metoda setBackground.

Blok pernyataan baris nomor 34 – 57 digunakan untuk menangani change event yang dipicu ketika salah satu dari dua anak panah di obyek spinner diklik untuk mengubah nilai string yang ditampilkan. Anda dapat menggunakan metoda getValue kelas JSpinner untuk mendapatkan nilai yang ditampilkan. Karena hasil pengembalian metoda getValue adalaah tipe kelas Obyek, maka nilai tersebut harus dikonversi ke bentuk string sebelum disimpan di variabel strWarna. Nilai string yang tersimpan di variabel strString digunakan sebagai acuan untuk mengubah warna latar obyek panel di penyeleksian if else.