2012-06-06 95 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(); 
    } 
}