Java 在JXDatePicker/JXMonthView中禁用日期
我正在编写的程序允许用户单击JXDatePicker上的日期来设置任务完成的日期。我想在JXDatePicker中禁用未来日期的选择,因为在我的程序中选择未来日期是无效的 我发现JXDatePickers包含一个JXMonthView,而日期选择器或月份视图似乎不允许禁用单个/范围的日期。我可以更改各个日期和日期范围的背景颜色,这应该允许我将未来的日期设置为单独的颜色。然后,每当用户单击日历时,我可以添加一些验证,以禁止将来的日期。然而,如果我能说像calendar.setMaxDate(今天)这样的话,它会更干净Java 在JXDatePicker/JXMonthView中禁用日期,java,swing,swingx,Java,Swing,Swingx,我正在编写的程序允许用户单击JXDatePicker上的日期来设置任务完成的日期。我想在JXDatePicker中禁用未来日期的选择,因为在我的程序中选择未来日期是无效的 我发现JXDatePickers包含一个JXMonthView,而日期选择器或月份视图似乎不允许禁用单个/范围的日期。我可以更改各个日期和日期范围的背景颜色,这应该允许我将未来的日期设置为单独的颜色。然后,每当用户单击日历时,我可以添加一些验证,以禁止将来的日期。然而,如果我能说像calendar.setMaxDate(今天)
有人知道有没有比手工编写功能更简单的方法?也许另一个日期选择器组件解决了这个问题?经过几分钟的研究,JDatePicker似乎可以在这里工作-请参阅
不过,如果有人知道一种简单的方法,仍然可以建议使用JXDatePickers来完成此操作。如果要将日期选择限制在一个范围内,可以指定上限和下限
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)
这将基本上限制从今天到周末的有效、可选择的日期
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());
Callback callB=new Callback(){
@凌驾
公共DateCell调用(最终日期选择器参数){
返回新的DateCell(){
@凌驾
public void updateItem(LocalDate项,布尔值为空){
super.updateItem(item,empty);//要更改生成的方法体,请选择工具|模板。
LocalDate today=LocalDate.now();
setDisable(空的| |项。比较到(今天)<0);
}
};
}
};
选择日期。设置日期单元格工厂(callB);
日期禁用……太好了,这很好用。结果我看到的是过时的javadoc,看起来setLower/UpperBound还没有实现。非常感谢,这就是我一直在寻找的。我只是在不久前和它一起玩的时候才知道它在那里;)-我相信1.6.4现在是我们当前的版本
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);