Java—从JSpinner返回分每秒毫秒

Java—从JSpinner返回分每秒毫秒,java,datetime,jspinner,Java,Datetime,Jspinner,好的,这个问题有两个部分,第一个是如何从一个JSpinner返回分钟秒毫秒(mm:ss.SSS)。我现在设置了一个JSpinner,它在JSpinner中使用java的DateEditor格式,如下所示: JSpinner spinner = new JSpinner(); spinner.setModel(new javax.swing.SpinnerDateModel()); spinner.setEditor(new javax.swing.JSpinner.DateEditor(spin

好的,这个问题有两个部分,第一个是如何从一个JSpinner返回分钟秒毫秒(mm:ss.SSS)。我现在设置了一个JSpinner,它在JSpinner中使用java的DateEditor格式,如下所示:

JSpinner spinner = new JSpinner();
spinner.setModel(new javax.swing.SpinnerDateModel());
spinner.setEditor(new javax.swing.JSpinner.DateEditor(spinner, "mm:ss.S"));
spinner.setBounds(420, 140, 228, 20);
contentPane.add(spinner);
但问题是,当我只想返回“分:秒.毫秒”而不想返回日期、月份或任何其他信息时,它将返回一个字符串,如“Wed Jun 06 00:26:12 MDT 2012”


问题的第二部分是如何只显示毫秒并将其更改为第十位,因此它不显示为(mm:ss.SSS),而是显示为(mm:ss.S),并且S值可以更改为介于0和9之间的值,而不是0和999之间的值。该值也需要以这种方式返回。

而不是使用DateEditor,您应该使用自定义的JSpinner.Editor


这里有一个例子,非常类似于您想要的,这样做:

您可以使用日历提取分钟、秒和毫秒。以下是一个例子:

SpinnerDateModel model = (SpinnerDateModel) spinner.getModel();
Calendar time = Calendar.getInstance();
time.setTime(model.getDate());
// Access minute, second, millisecond
time.get(Calendar.MINUTE);
time.get(Calendar.SECOND);
time.get(Calendar.MILLISECOND);
设置默认值应按如下方式工作:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);

SpinnerDateModel model = new SpinnerDateModel(cal.getTime(), null,
            null, Calendar.SECOND);

JSpinner spinner = new JSpinner();
spinner.setModel(model);

关于问题的第一部分。。。不久前我遇到了一个类似的问题,我需要一个能够管理小时/分钟/秒的微调器

我编写了JSpinner类的一个新实现,您可以使用它作为基础,并对其进行更新以获得分/秒/毫秒微调器。我与您分享“原样”,它符合我的个人需求,但我肯定可以提高:

/**
 * TimeSpinner
 * A implementation of JSpinner that manages
 * only the hour/minute part of a date.
 * Careful, in consequence the getValue()
 * gives you a date based on the 01/01/1970
 * ('issue' known about JSpinner).
 * => This spinner implements its own model. It allows to fix
 * a pb about the tick (the regular model SpinnerDateModel
 * increases/decreases hours instead of minutes.
 * => It overrides setBackground and make it works (the regular
 * JSpinner.setBackground does not).
 *
 * User: Yannick DECOURTRAY
 * Date: 21/06/11
 */
public class TimeSpinner extends JSpinner {

    /**
     * Constructor
     */
    public TimeSpinner() {
        Date date = today();
        TimeSpinnerModel sm = new TimeSpinnerModel(date, null, null, Calendar.MINUTE);
        setModel(sm);
        JSpinner.DateEditor de = new JSpinner.DateEditor(this, "h:mm a");
        setEditor(de);
    }

    /**
     * Calls setBackground on Editor of the spinner
     * @see javax.swing.JComponent#setBackground(java.awt.Color)
     */
    @Override
    public void setBackground(Color bg) {
        JSpinner.DefaultEditor editor = (JSpinner.DefaultEditor) getEditor();
        editor.getTextField().setBackground(bg);
    }

    /**
     * Model class
     */
    private class TimeSpinnerModel extends SpinnerDateModel {

        /**
         * Constructor
         * @param value Current date
         * @param start Low limite date
         * @param end High limit date
         * @param calendarField Step of incrementation
         */
        public TimeSpinnerModel(Date value,
                                Comparable start,
                                Comparable end,
                                int calendarField) {
            super(value, start, end, calendarField);
        }

        /** @see javax.swing.SpinnerDateModel#getNextValue() */
        public Object getNextValue() {
            Date currentDate = getDate();
            Calendar currentCal = Calendar.getInstance();
            currentCal.setTime(currentDate);
            int calField = Calendar.MINUTE;//getCalendarField();

            // Add calField to currentDate
            currentCal.add(calField, 1);
            Date newDate = new Date(currentCal.getTimeInMillis());

            Date endDate = (Date) getEnd();
            if (endDate != null && newDate.after(endDate))
                return currentDate;
            else
                return newDate;
        }

         /** @see javax.swing.SpinnerDateModel#getPreviousValue() */
        public Object getPreviousValue() {
            Date currentDate = getDate();
            Calendar currentCal = Calendar.getInstance();
            currentCal.setTime(currentDate);
            int calField = Calendar.MINUTE;//getCalendarField();

            // Add calField to currentDate
            currentCal.add(calField, -1);
            Date newDate = new Date(currentCal.getTimeInMillis());

            Date startDate = (Date) getStart();
            if (startDate != null && newDate.before(startDate))
                return currentDate;
            else
                return newDate;
        }
    }

    /**
     * Gets the today date
     *
     * @return the today date
     */
    private static Date today() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.set(Calendar.HOUR, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }
}

那么,我如何将默认时间设置为00:00.000呢?@clangfan1我添加了一个默认时间的示例。