我正在尝试禁用DatePicker
GWT组件中的所有日期,这是我的代码示例:
datePicker.addShowRangeHandler(new ShowRangeHandler<Date>() {
public void onShowRange(ShowRangeEvent<Date> event) {
System.out.println("First date : " + event.getStart());
System.out.println("Last date : " + event.getEnd());
System.out.println("First date from date picker : " + datePicker.getFirstDate());
System.out.println("Last date from date picker : " + datePicker.getLastDate());
// Disable all the date shown by the Calendar
List<Date> dateList = new ArrayList<Date>();
Date currentDate = event.getStart();
while(!currentDate.after(datePicker.getLastDate())) {
Date updateDate = CalendarUtil.copyDate(currentDate);
dateList.add(updateDate);
CalendarUtil.addDaysToDate(currentDate, 1);
}
for(Date date : dateList) {
System.out.println("Date selected : " + date);
System.out.println("date visibility : " + datePicker.isDateVisible(date));
}
}
});
日期可见性始终为假,它一直告诉我所有日期都不可见,但它应该是真的,因为它'在第一个日期和最后一个日期之间,任何人都知道在日历中禁用日期的方法吗?'所以如果尝试使用datePicker上的setTransientOnEnables()
方法获取异常日期,因为日期不可见。
我曾尝试过实现自己的DefaultClendarView
,但它需要GWT无法提供的受保护类。
答案 0 :(得分:2)
我有类似的问题。我试图在将来禁用日期。 我最终发现开始和结束日期是最终变量。当我尝试更改开始日期时,我得到了未定义的行为(在某些情况下,我的浏览器完全冻结了。)。解决方案是复制开始日期并直接操作副本而不是开始日期。 这就是我最终的结果:
datePicker.addShowRangeHandler(new ShowRangeHandler<java.util.Date>()
{
@Override
public void onShowRange(ShowRangeEvent<Date> event)
{
Date start = event.getStart();
Date temp = CalendarUtil.copyDate(start);
Date end = event.getEnd();
Date today = new Date();
while(temp.before(end))
{
if(temp.after(today) && datePicker.isDateVisible(temp))
{
datePicker.setTransientEnabledOnDates(false,temp);
}
CalendarUtil.addDaysToDate(temp, 1);
}
}
});
这应该适用于GWT 2.4。早期版本未经过测试。