日付データの表示形式を設定する
データモデルとして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番目のコンストラクタを確認してみます。
public JSpinner.DateEditor(JSpinner spinner, String dateFormatPattern)
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);
サンプルプログラム
では簡単なサンプルを作成して試してみます。
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 )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。