Swing/SpinnerDateModel のバックアップの現在との差分(No.1)
TITLE:JSpinnerで日付を設定
Posted by aterai at 2011-08-22
JSpinnerで日付を設定
JSpinnerを使って日付を設定します。- category: swing folder: SpinnerDateModel title: JSpinnerで日付を設定 tags: [JSpinner, SpinnerDateModel, FocusListener, Calendar] author: aterai pubdate: 2011-08-22T15:46:11+09:00 description: JSpinnerに、下限値を設定したSpinnerDateModelを設定して、日付の変更をテストします。 image:
概要
JSpinner
に、下限値を設定したSpinnerDateModel
を設定して、日付の変更をテストします。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
サンプルコード
#spandel
final String dateFormatPattern = "yyyy/MM/dd";
#spanend
#spanadd
String dateFormat= "yyyy/MM/dd";
#spanend
JSpinner s = new JSpinner(
new SpinnerDateModel(date, start, null, Calendar.DAY_OF_MONTH));
#spandel
final JSpinner.DateEditor editor = new JSpinner.DateEditor(s, dateFormatPattern);
#spanend
#spanadd
JSpinner.DateEditor editor = new JSpinner.DateEditor(s, dateFormat);
#spanend
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);
}
EventQueue.invokeLater(() -> {
int i = dateFormat.lastIndexOf("dd");
editor.getTextField().select(i, i + 2);
});
}
});
View in GitHub: Java, Kotlin解説
- 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)が範囲外となり、矢印ボタンで日付を変更できない
- 参考: OTN Discussion Forums : DateSpinner spins only after an edit
- 本日を現在の値と下限値、上限値はnull(制限無し)、増減値をCalendar.DAY_OF_MONTHとしたSpinnerDateModelを使用
解説
-
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
)が範囲外となり矢印ボタンで日付を変更できない - 参考: Swing - 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
- 下限値を以下のように本日の初めにリセット
-
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
- フォーカスがエディタに移動した場合、日付部分が選択状態になるようリスナーを設定
-
JSpinner.DateEditor + FocusListener
- フォーカスがエディタに移動した場合、日付部分が選択状態になるよう
FocusListener
を設定- 矢印ボタンのクリックで編集開始した場合、先頭の年度部分ではなく日付が増減する
- 参考: CellEditorをJSpinnerにして日付を変更
- フォーカスがエディタに移動した場合、日付部分が選択状態になるよう
参考リンク
参考リンク
- Swing - DateSpinner spins only after an edit
- CellEditorをJSpinnerにして日付を変更
- JSpinnerでLocalDateTimeを使用する
-
Date
ではなく、LocalDateTime
を使用する方法
-