日付データの表示形式を設定する

広告

データモデルとしてSpinnerDateModelクラスを使用した場合に、スピナーに表示される日付データの表示形式を設定する方法を確認します。日付データを扱う場合にはエディタとして「JSpinner.DateEditor」クラスを使用します。

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

java.lang.Object
  java.awt.Component
    java.awt.Container
      javax.swing.JComponent
        javax.swing.JPanel
          javax.swing.JSpinner.DefaultEditor
            javax.swing.JSpinner.DateEditor

public static class JSpinner.DateEditor
extends JSpinner.DefaultEditor

JSpinner.DateEditorクラスはJSpinner.DefaultEditorクラスのサブクラスとなっています。JSpinner.DefaultEditorクラス自体はJPanelクラスのサブクラスです。

JSpinner.DateEditorクラスのコンストラクタ

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

コンストラクタ
JSpinner.DateEditor(JSpinner spinner)
JFormattedTextField での SpinnerDateModel の値の表示、編集をサポートする JSpinner エディタを構築します。
JSpinner.DateEditor(JSpinner spinner, String dateFormatPattern)
JFormattedTextField での SpinnerDateModel の値の表示、編集をサポートする JSpinner エディタを構築します。

コンストラクタは2つ用意されています。通常はフォーマットを合わせて指定する2番目のコンストラクタを使用します。

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

JFormattedTextField での SpinnerDateModel の値の表示、編集をサポートす
る JSpinner エディタを構築します。この DateEditor は、スピナーの 
ChangeListener および新しい JFormattedTextField の PropertyChangeListener
の両方になります。

パラメータ:
  spinner - このエディタが監視するスピナーモデル
  dateFormatPattern - テキストフィールドの値の表示と解析に使用する
    SimpleDateFormat オブジェクトの 初期パターン 
例外: 
  IllegalArgumentException - スピナーモデルが SpinnerDateModel のインス
    タンスでない場合

1番目の引数にエディタの対象となるJSpinnerクラスのオブジェクトを設定します。

2番目の引数には表示形式を表す文字列を指定します。JSpinner.DateEditorクラスではデータの表示にJFormattedTextFieldクラスを使用しています。JFormattedTextFieldクラスでは引数にフォーマットを表すクラスのオブジェクトを指定しますがJSpinner.DateEditorクラスではSimpleDateFormatクラスを利用して表示形式を設定します。

2番目の引数に設定された文字列はSimpleDateFormatクラスのコンストラクタに引き渡される値となりますので、SimpleDateFormatクラスで設定可能なフォーマット形式で指定して下さい。

※SimpleDateFormatクラスについては『JFormattedTextFieldクラス』を参照して下さい。

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

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

JSpinner.DateEditor editor = new JSpinner.DateEditor(spinner, "yyyy.MM.dd");
spinner.setEditor(editor);

サンプルプログラム

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

JSpinnerTest18.java

import javax.swing.*;
import java.awt.Dimension;
import java.awt.BorderLayout;

public class JSpinnerTest18 extends JFrame{

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

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

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

    JSpinner.DateEditor editor = new JSpinner.DateEditor(spinner, "yyyy.MM.dd");
    spinner.setEditor(editor);
    spinner.setPreferredSize(new Dimension(150, 25));

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

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

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

日付用のエディターを設定する

今回は「yyyy.mm.dd」の形式で表示するように設定しています。

日付用のエディターを設定する

日付用のエディターを設定する

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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