GWT DateBox - 禁用特定日期

时间:2014-05-30 15:04:17

标签: java gwt datepicker

我想在日期框中禁用特定日期。我尝试使用此代码,但指定的日期(当前日期)不会被禁用。

final DateBox dateBox = new DateBox();
dateBox.getDatePicker().addShowRangeHandler(new ShowRangeHandler<Date>() {

    @Override
    public void onShowRange(final ShowRangeEvent<Date> event) {
        List<Date> disabledDates = new ArrayList<Date>();
        disabledDates.add(new Date());
        dateBox.getDatePicker().setTransientEnabledOnDates(false, disabledDates);
    }
});

还有其他办法吗?

编辑:按照apanizo的示例,第29.5天显示为灰色,但仍可点击。

enter image description here

2 个答案:

答案 0 :(得分:1)

真的很抱歉,我没有测试我上次回答的代码。

我刚试过,你的代码对我有用,我唯一做的就是通过setTransientEnabledOnDates(false, dateToDisable);方法传递我不想要的所有日期。

示例:

public void onModuleLoad() {
    final DateBox dateBox = new DateBox();

    dateBox.getDatePicker().addShowRangeHandler(new ShowRangeHandler<Date>() {
        @Override
        public void onShowRange(final ShowRangeEvent<Date> dateShowRangeEvent) {
            final Date today = new Date(); //30 May 3014
            final Date yesterday = new Date(today.getTime()- 24*60*60*1000);

            //disabling yesterday - 29 May of 2014
            dateBox.getDatePicker().setTransientEnabledOnDates(false, yesterday);

        }
    });

    RootPanel.get().add(dateBox);

  }

如果要在禁用日期禁用click事件,则这是已解决但未传递的错误。

请参阅: https://code.google.com/p/google-web-toolkit/issues/detail?id=7876

我认为在GWT的2.7版本中它会被发布,同时你可以在com.google.gwt.user.datepicker.client.CellGridImpl第77行中修改它:

 addDomHandler(new ClickHandler() {
     @Override
     public void onClick(ClickEvent event) {
       if (isActive(Cell.this)) {
         setSelected(Cell.this);
       }
     }
  }, ClickEvent.getType());

detail here

答案 1 :(得分:0)

只需在日期选择器上添加值更改的侦听器,即可听取日期中的任何更改。

例如,如果不允许当前日期并选择它,则只需丢弃更改并恢复到上一个​​日期或在需要时显示警告消息,并为当前日期添加样式以将其视为已禁用。

此处使用日期时间格式仅检查日期,检查日期时丢弃时间。

示例代码:

private Date prevDate;
...

final DateBox dateBox = new DateBox();
final DateTimeFormat dateTimeFormat=DateTimeFormat.getFormat("MM/dd/yyyy");

dateBox.getDatePicker().addValueChangeHandler(new ValueChangeHandler<Date>() {

    @Override
    public void onValueChange(ValueChangeEvent<Date> event) {
        if (dateTimeFormat.format(event.getValue()).equals(dateTimeFormat.format(new Date()))) {
            dateBox.setValue(prevDate);
            // show warning message here
        }else{
            prevDate=event.getValue();
        }
    }
});