2

私はこれがとても奇妙だと誓います。現在の日付、制限なし、Calendar.MINUTE 単位の新しい SpinnerDateModel を使用して、Spinner を設定し、モデルを作成します。

ドキュメントで述べられているように:

start から end までの一連の日付を表す SpinnerDateModel を作成します。nextValue メソッドと previousValue メソッドは、現在の日付の値を calendarField の時間単位で進めるか逆にすることで、シーケンスの要素を計算します。start パラメーターと end パラメーターを null にして、範囲に上限または下限がないことを示すことができます。

そして、ここに私のコードがあります:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.JSpinner.DefaultEditor;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.text.DateFormatter;
import javax.swing.text.DefaultFormatterFactory;

public class JSpinnerTest {

    public JSpinnerTest() {
        initComponents();
    }

    private void initComponents() {
        JFrame frame = new JFrame("JSpinner Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JSpinner spinner = new JSpinner();
        spinner.setModel(new javax.swing.SpinnerDateModel(new Date(), null, null, Calendar.MINUTE));
        SimpleDateFormat format = new SimpleDateFormat("HH:mm");

        ((DefaultEditor) spinner.getEditor()).getTextField().setFormatterFactory(new DefaultFormatterFactory(new DateFormatter(format)));


        System.out.println("ORIGINAL VALUE: " + spinner.getValue().toString());

        spinner.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                System.out.println("VALUE: " + ((JSpinner) e.getSource()).getValue().toString());
            }
        });

        frame.add(spinner);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new JSpinnerTest();
            }
        });
    }
}

しかし、小さな矢印ボタンをクリックするたびに、日付が 1970 年 1 月 1 日にリセットされます。

出力例:

元の値: Thu Dec 06 17:06:13 ICT 2012

値: 1970 年 1 月 1 日木曜日 17:06:00 ICT

値: 1970 年 1 月 1 日木曜日 17:06:00 ICT

値: 1970 年 1 月 1 日木曜日 18:06:00 ICT

4

2 に答える 2

1

スピナーに接続されたエディターで使用される日付形式を変更しています。HH:mm 形式を使用すると、残りのフィールドはエポックで初期化されるようです。日付エディターで使用される形式を変更しない場合、期待どおりに機能します。

于 2012-12-06T11:18:47.057 に答える
0

dateformat に日付を含めると、これは発生しません (「dd/mm/yy HH:mm」)。これがあなたの求めているものではないことは知っていますが、日付を明示的に指定しないと、デフォルトでそれらを使用しないと思います。

于 2012-12-06T11:18:30.253 に答える