TITLE:JSpinnerで日付を設定

Posted by at 2011-08-22

JSpinnerで日付を設定

JSpinnerを使って日付を設定します。

  • &jnlp;
  • &jar;
  • &zip;
SpinnerDateModel.png

サンプルコード

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);
      }
    });
  }
});
View in GitHub: Java, Kotlin

解説

  • Calendar.DAY_OF_MONTH
    • 本日を現在の値と下限値、上限値はnull(制限無し)、増減値をCalendar.DAY_OF_MONTHとしたSpinnerDateModelを使用
  • min: set(Calendar.HOUR_OF_DAY, 0)
    • 下限値を以下のように本日の初めにリセット
      • 例: Mon Aug 22 15:09:27 JST 2011 を Mon Aug 22 00:00:00 JST 2011
        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
    • フォーカスがエディタに移動した場合、日付部分が選択状態になるようリスナーを設定

参考リンク

コメント