【问题标题】:GWT DateBox - Disable specific dateGWT DateBox - 禁用特定日期
【发布时间】:2014-05-30 15:04:17
【问题描述】:

我想禁用日期框中的特定日期。我用这段代码试过了,但指定的日期(当天)没有被禁用。

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 天看起来是灰色的,但仍然可以点击。

【问题讨论】:

  • 嗨 Jan,刚刚更新了我的答案 :)

标签: java gwt datepicker


【解决方案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);

  }

如果您想在禁用日期禁用点击事件,这是一个已解决且未交付的错误。

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

我认为在 GWT 的 2.7 版本中它会发布,同时你可以在com.google.gwt.user.datepicker.client.CellGridImplline 77 中对其进行修补:

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

detail here

【讨论】:

  • 好像没什么区别
【解决方案2】:

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

例如,如果当前日期不被允许并且被选中,那么只需放弃更改并恢复到以前的日期,或者在需要时显示警告消息,并为当前日期添加样式以使其看起来被禁用。

这里日期时间格式仅用于检查日期,检查日期时丢弃时间。

示例代码:

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();
        }
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 2011-07-16
    • 2017-07-31
    • 1970-01-01
    • 2012-04-02
    • 2010-10-15
    • 2013-12-05
    • 2013-05-09
    相关资源
    最近更新 更多