我发誓这太奇怪了。我创建了一个Spinner,使用具有当前日期,无限制和Calendar.MINUTE单位的新SpinnerDateModel设置模型。
正如文档中所述:
创建一个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日。为什么?
示例输出:
原始价值:2012年12月17日17:06:13 ICT 2012
VALUE:Thu Jan 01 17:06:00 ICT 1970
VALUE:Thu Jan 01 17:06:00 ICT 1970
VALUE:Thu Jan 01 18:06:00 ICT 1970
答案 0 :(得分:1)
您正在修改附加到Spinner的编辑器使用的日期格式。看起来当您使用HH:mm格式时,其余字段将使用epoch初始化。如果您不更改日期编辑器使用的格式,它将按预期工作。
答案 1 :(得分:0)
如果您输入dateformat以包含未发生的日期,“dd / mm / yy HH:mm”。我知道这不是你要求的,但我会假设当你没有明确说明日期时它默认不使用它们。