• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JSpinnerで日付を設定
#navi(../)
RIGHT:Posted by &author(aterai); at 2011-08-22
*JSpinnerで日付を設定 [#e79d682c]
JSpinnerを使って日付を設定します。

-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(https://lh5.googleusercontent.com/-llHXaOVDQbQ/TlH5yRAODSI/AAAAAAAABBE/XsSUtm7J_U0/s800/SpinnerDateModel.png)

**サンプルコード [#b916b77a]
#code(link){{
final String dateFormatPattern = "yyyy/MM/dd";
JSpinner s = new JSpinner(
    new SpinnerDateModel(date, start, null, Calendar.DAY_OF_MONTH));
final JSpinner.DateEditor editor = new JSpinner.DateEditor(s, dateFormatPattern);
s.setEditor(editor);
editor.getTextField().addFocusListener(new FocusAdapter() {
  @Override public void focusGained(FocusEvent e) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        int i = dateFormatPattern.lastIndexOf("dd");
        editor.getTextField().select(i, i+2);
      }
    });
  }
});
}}

**解説 [#a7924332]
- Calendar.DAY_OF_MONTH
-- 本日を現在の値と下限値、上限値はnull(制限無し)、増減値をCalendar.DAY_OF_MONTHとしたSpinnerDateModelを使用
--- 下限値が現在時刻(例: Mon Aug 22 15:09:27 JST 2011)なので、現在の値(Mon Aug 22 00:00:00 JST 2011)が範囲外となり、矢印ボタンで日付を変更できない
--- 参考: [https://forums.oracle.com/forums/thread.jspa?threadID=2266752 OTN Discussion Forums : DateSpinner spins only after an edit]

- min: set(Calendar.HOUR_OF_DAY, 0)
-- 下限値を以下のように本日の初めにリセット
--- 例: Mon Aug 22 15:09:27 JST 2011 を Mon Aug 22 00:00:00 JST 2011
#code{{
Calendar today = Calendar.getInstance();
today.clear(Calendar.MILLISECOND);
today.clear(Calendar.SECOND);
today.clear(Calendar.MINUTE);
today.set(Calendar.HOUR_OF_DAY, 0);
Date start = today.getTime();

System.out.println(date);
System.out.println(start);

JSpinner spinner2 = new JSpinner(new SpinnerDateModel(
    date, start, null, Calendar.DAY_OF_MONTH));
spinner2.setEditor(new JSpinner.DateEditor(spinner2, dateFormatPattern));
}}

- JSpinner.DateEditor+FocusListener
-- フォーカスがエディタに移動した場合、日付部分が選択状態になるようリスナーを設定
--- 矢印ボタンのクリックで編集開始した場合、先頭の年度部分ではなく日付が増減する
--- 参考: [[CellEditorをJSpinnerにして日付を変更>Swing/DateCellEditor]]


**参考リンク [#r0bd2cc7]
- [https://forums.oracle.com/forums/thread.jspa?threadID=2266752 OTN Discussion Forums : DateSpinner spins only after an edit]
- [[CellEditorをJSpinnerにして日付を変更>Swing/DateCellEditor]]

**コメント [#h4700b7a]
#comment