SpinnerDateModel
只是使用1來遞增您想要更改的字段。
我延長SpinnerDateModel
發生加成屬性添加到模型來控制增量值而不是硬編碼到1:
import java.util.*;
import javax.swing.*;
public class MySpinnerDateModel extends SpinnerDateModel
{
private int increment = 1;
public MySpinnerDateModel(Date value, Comparable start, Comparable end, int calendarField)
{
super(value, start, end, calendarField);
}
public MySpinnerDateModel()
{
this(new Date(), null, null, Calendar.DAY_OF_MONTH);
}
public void setIncrement(int increment)
{
this.increment = increment;
}
public int getIncrement()
{
return increment;
}
@Override
public Object getNextValue()
{
Calendar cal = Calendar.getInstance();
Date value = (Date)getValue();
cal.setTime(value);
cal.add(getCalendarField(), increment);
Date next = cal.getTime();
Comparable end = getEnd();
return ((end == null) || (end.compareTo(next) >= 0)) ? next : null;
}
@Override
public Object getPreviousValue()
{
Calendar cal = Calendar.getInstance();
Date value = (Date)getValue();
cal.setTime(value);
cal.add(getCalendarField(), -increment);
Date prev = cal.getTime();
Comparable start = getStart();
return ((start == null) || (start.compareTo(prev) <= 0)) ? prev : null;
}
}
你應該能夠使用你的模型前,但做的方式一條附加聲明:
MySpinnerDateModel model = new MySpinnerDateModel(currentDate, currentDate, latestDate, Calendar.MINUTE);
model.setIncrement(10);
這不會執行任何範圍檢查。下一個/前一個值應該落在開始/結束範圍內。另外,如果你想增加幾天呢? – camickr
謝謝 - 編輯範圍檢查記住。剛剛看到你的答案,並喜歡它在這個快速和骯髒的選擇(更靈活的增量時間)。 – copeg
我剛剛從'SpinnerDateModel'類中複製了現有代碼,並將其修改爲使用變量作爲增量/減量值。我儘量避免在可能的情況下重寫代碼。 – camickr