我正在尝试将JSpinner
设置为从00:00到02:00运行。
所以我构建了这段代码:
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
public class HourSpinner2 extends javax.swing.JFrame {
javax.swing.JSpinner jSpinner2;
public HourSpinner2() {
jSpinner2 = new javax.swing.JSpinner();
add(jSpinner2);
// Option 1 : set range
jSpinner2.setModel(new SpinnerDateModel(new java.util.Date(1388498400000L), new java.util.Date(1388484000000L), new java.util.Date(1388505600000L), java.util.Calendar.MINUTE));
// Option 2 : set HH:mm format
jSpinner2.setModel(new SpinnerDateModel(new java.util.Date(1388498400000L), null, null, java.util.Calendar.MINUTE));
JSpinner.DateEditor de = new JSpinner.DateEditor(jSpinner2, "HH:mm");
de.getTextField().setEditable( false );
jSpinner2.setEditor(de);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new HourSpinner2().setVisible(true);
}
});
}
}
我发现我一次只能做到2个中的一个。设置范围或设置格式。两者都可以冻结组件以供用户编辑。
如何使这个范围和格式都有效?
答案 0 :(得分:2)
您的代码存在的问题是,实际上格式化程序会抛弃 date 字段,并仅保留当前值的 time 部分。但是,该值不再位于 min 和 max 之间,而且这是不可更改的。
作为一种简单的解决方法,您可以指定min
和max
值,如下面的代码所示:
Calendar cal1 = GregorianCalendar.getInstance();
cal1.clear();
cal1.set(1970, Calendar.JANUARY, 1, 0, 0);
Date min = cal1.getTime();
Calendar cal2 = GregorianCalendar.getInstance();
cal2.clear();
cal2.set(1970, Calendar.JANUARY, 1, 2, 0);
Date max = cal2.getTime();