JSpinner时间范围+ HH:MM格式

时间:2013-12-31 14:53:30

标签: java swing jspinner

我正在尝试将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个中的一个。设置范围或设置格式。两者都可以冻结组件以供用户编辑。

如何使这个范围和格式都有效?

1 个答案:

答案 0 :(得分:2)

您的代码存在的问题是,实际上格式化程序会抛弃 date 字段,并仅保留当前值的 time 部分。但是,该值不再位于 min max 之间,而且这是不可更改的。

作为一种简单的解决方法,您可以指定minmax值,如下面的代码所示:

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();