SpinnerDateModelクラスの定義とコンストラクタ

広告

SpinnerModelインターフェースの実装クラスの1つであるSpinnerDateModelクラスを利用する方法です。SpinnerDateModelクラスは日付に関する値をデータモデルのデータとして利用する場合に使います。

SpinnerDateModelクラスの定義を確認します。クラス図は次のようになっています。

java.lang.Object
  javax.swing.AbstractSpinnerModel
    javax.swing.SpinnerDateModel

public class SpinnerDateModel
extends AbstractSpinnerModel
implements Serializable

SpinnerDateModelはAbstractSpinnerModelクラスのサブクラスとなっています。AbstractSpinnerModelクラスはSpinnerModelインターフェースを実装したクラスでベースとなっているクラスです。

SpinnerDateModelクラスのコンストラクタ

SpinnerDateModelクラスをを利用するにはコンストラクタを使ってSpinnerDateModelクラスのオブジェクトを作成します。どのようなコンストラクタが用意されているか確認してみます。

コンストラクタ
SpinnerDateModel()
初期の value が現在の値で、calendarField が Calendar.DAY_OF_MONTH に等しく、start と end に限度がない SpinnerDateModel を構築します。
SpinnerDateModel(Date value, Comparable start, Comparable end, int calendarField)
start から end までの日付のシーケンスを表す SpinnerDateModel を作成します。

コンストラクタは2つ用意されています。デフォルトの設定を利用する場合と表示される日付の種類や増減の単位を設定する場合でコンストラクタを選択します。

では1番目のコンストラクタを確認してみます。

初期の value が現在の値で、calendarField が Calendar.DAY_OF_MONTH に等し
く、start と end に限度がない SpinnerDateModel を構築します。

最小値及び最大値の上限が無く初期値が現在の日付でありボタンクリックによる値の変動の単位が「日」のデータモデルです。これは「SpinnerModel(new Date(), null, null, Calendar.DAY_OF_MONTH)」とした場合と同じです。

実際の使い方は次のようになります。

SpinnerDateModel model = new SpinnerDateModel();
JSpinner spinner = new JSpinner(model);

サンプルプログラム

では簡単なサンプルを作成して試してみます。

JSpinnerTest14.java

import javax.swing.*;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.util.Date;
import java.util.Calendar;

public class JSpinnerTest14 extends JFrame{

  public static void main(String[] args){
    JSpinnerTest14 frame = new JSpinnerTest14();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 300, 200);
    frame.setTitle("タイトル");
    frame.setVisible(true);
  }

  JSpinnerTest14(){

    SpinnerDateModel model = new SpinnerDateModel();

    JSpinner spinner = new JSpinner(model);
    spinner.setPreferredSize(new Dimension(150, 25));

    JPanel p = new JPanel();
    p.add(spinner);

    getContentPane().add(p, BorderLayout.CENTER);
  }
}

上記をコンパイルした後で実行すると次のように表示されます。

SpinnerDateModelのサンプル

現在の日付及び時刻が表示されます。ボタンをクリックすると日の部分が変動するはずなのですが年の部分が変動します。

SpinnerDateModelのサンプル

また他の日付の部分をクリックしてからボタンをクリックすると、先ほどクリックした日付の部分が変動します。

SpinnerDateModelのサンプル

SpinnerDateModelのサンプル

想定していたのと少し異なるのですが原因が分かりません。分かり次第更新しておきます。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。