2012-06-06 75 views
0

好吧,这个问题有两个部分,第一个是我怎样才能从JSpinner返回微小的第二毫秒(mm:ss.SSS)。我有一个JSpinner的建立,现在是一个使用Java的DateEditor格式中的JSpinner这样的:Java - 从JSpinner返回分钟秒毫秒

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

但问题是,它会返回一个字符串,如“周三6月6日零点26分12秒MDT 2012”时,我只想返回“分:秒。毫秒”,而不是日,月或任何其他信息。

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

回答

1

你可以用日历来提取分钟,秒和毫秒。这里有一个例子:

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); 
+0

我怎么能设置默认时间为00:00.000然后呢? – clankfan1

+0

@ clankfan1我为默认时间添加了一个示例。 – sebastian

1

关于问题的第一部分。我前一段时间有一个类似的问题,我需要的是微调管理小时/分钟/秒。

我写了一个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(); 
    } 
} 
相关问题