在DatePicker中禁用日期不起作用

时间:2011-09-02 17:23:20

标签: gwt

我正在尝试禁用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无法提供的受保护类。

1 个答案:

答案 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。早期版本未经过测试。