Java—从JSpinner返回分每秒毫秒
好的,这个问题有两个部分,第一个是如何从一个JSpinner返回分钟秒毫秒(mm:ss.SSS)。我现在设置了一个JSpinner,它在JSpinner中使用java的DateEditor格式,如下所示: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 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我添加了一个默认时间的示例。