我正在编写的程序允许用户单击JXDatePicker上的日期来设置任务完成的日期。我想在JXDatePicker中禁用未来日期的选择,因为在我的程序中选择未来日期无效。
我发现JXDatePickers包含一个JXMonthView,似乎日期选择器或月份视图不允许您禁用个别/日期范围。我可以更改各个日期和日期范围的背景颜色,这样我就可以将未来的日期作为单独的颜色。然后,只要用户单击日历以禁止将来的日期,我就可以添加一些验证。但是,如果我能说一下像calendar.setMaxDate(今天)这样的话会更加清晰;
有人知道是否有一种比手动编码功能更简单的方法吗?也许另一个日期选择器组件修复了这个问题?
答案 0 :(得分:5)
如果要将日期选择限制为仅范围,可以指定上限和下限
JXDatePicker picker = new JXDatePicker();
Calendar calendar = picker.getMonthView().getCalendar();
// starting today if we are in a hurry
calendar.setTime(new Date());
picker.getMonthView().setLowerBound(calendar.getTime());
// end of next week
CalendarUtils.endOfWeek(calendar);
calendar.add(Calendar.WEEK_OF_YEAR);
picker.getMonthView().setUpperBound(calendar.getTime());
(取自JavaDocs)
这基本上会限制从今天到本周末的有效可选日期。
答案 1 :(得分:0)
经过几分钟的研究后,看起来JDatePicker可以在这里工作 - 请参阅http://jdatepicker.com/tour-date-restriction.html
尽管如此,如果有人知道这样做的简单方法,仍然可以使用JXDatePickers完成此项建议。
答案 2 :(得分:0)
package org.chillies.validator;
import java.util.Date;
@SuppressWarnings("deprecation")
public class DateValidator {
public Date getlowerBoundDate(){
String date;
Date date1=new Date();
Integer year=1900+date1.getYear();
date="01-Apr-"+year;
return new Date(date);
}
public Date getupperBoundDate(){
String date;
Date date1=new Date();
Integer year=1900+date1.getYear();
date="31-Mar-"+(year+1);//you can set date as you wish over here
return new Date(date);
}
}
其余的代码就像这样应用这个类
datePicker.setBorder(null);
DateValidator datevalidator=new DateValidator();
datePicker.getMonthView().setLowerBound(datevalidator.getlowerBoundDate());
datePicker.getMonthView().setUpperBound(datevalidator.getupperBoundDate());
答案 3 :(得分:0)
Callback<DatePicker, DateCell> callB = new Callback<DatePicker, DateCell>() {
@Override
public DateCell call(final DatePicker param) {
return new DateCell() {
@Override
public void updateItem(LocalDate item, boolean empty) {
super.updateItem(item, empty); //To change body of generated methods, choose Tools | Templates.
LocalDate today = LocalDate.now();
setDisable(empty || item.compareTo(today) < 0);
}
};
}
};
selectedDate.setDayCellFactory(callB);
禁用日期....