2012-06-06 3 views
0

이 질문에 두 부분으로 나뉘어서 JSpinner에서 분 초 밀리 초 (mm : ss.SSS)를 어떻게 반환 할 수 있습니까? 나는 JSpinner의이 같은 해 JSpinner에 지금은 자바의 DateEditor 형식을 사용하고 설정이 있습니다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일 산악 서머 타임 00시 26분 12초 2012"때 나는 단지 "분 : 초. 밀리 세컨드 (second : second.millisecond)"를 반환하고 일, 달 또는 기타 정보는 반환하지 않고 싶습니다.

질문의 두 번째 부분은 밀리 초를 10 번째 자리까지만 표시하고 변경할 수 있기 때문에 (mm : ssS)로 표시하는 대신 밀리 초를 (mm : ss.S)로 표시하고 S 값은 0에서 9 사이의 값으로 변경 될 수 있으며 값은이 값을 반환해야합니다.

답변

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 클래스의 새로운 구현을 작성했습니다. 기본으로 사용하고 Minutes/Seconds/Milliseconds 회 전자를 얻기 위해 업데이트 할 수 있습니다. 나는 당신과 '나 같은 존재'로 나눌 수 있지만 내 개인적 욕구에 꼭 맞지만 확실히 향상시킬 수 있습니다.

/** 
* 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(); 
    } 
} 
관련 문제