【问题标题】:Disabling dates in a JXDatePicker/JXMonthView在 JXDatePicker/JXMonthView 中禁用日期
【发布时间】:2012-11-05 04:55:56
【问题描述】:

我正在编写的程序允许用户单击 JXDatePicker 上的日期来设置任务完成的日期。我想在 JXDatePicker 中禁用对未来日期的选择,因为在我的程序中选择未来日期是无效的。

我发现 JXDatePickers 包含一个 JXMonthView,日期选择器或月份视图似乎不允许您禁用单个/日期范围。我可以更改单个日期和日期范围的背景颜色,这应该允许我将未来的日期设置为单独的颜色。然后,每当用户单击日历以禁止未来日期时,我都可以添加一些验证。但是,如果我能说诸如 calendar.setMaxDate(today); 之类的话,那就更简洁了。

有谁知道是否有比手动编写功能更简单的方法?也许另一个日期选择器组件可以解决这个问题?

【问题讨论】:

    标签: java swing swingx


    【解决方案1】:

    如果您想将日期选择限制在一个范围内,您可以指定上限和下限

    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)

    这基本上会限制从今天到周末的有效、可选日期。

    【讨论】:

    • 太棒了,这很好用。原来我正在查看过时的 javadocs - download.java.net/javadesktop/swinglabs/releases/0.8/docs/api 上的那些看起来 setLower/UpperBound 尚未实现。非常感谢,这就是我想要的。
    • 我只是在不久前玩的时候才知道它在那里 ;) - 我相信 1.6.4 我们现在是当前版本
    【解决方案2】:

    经过几分钟的研究,看起来 JDatePicker 可以在这里工作 - 请参阅 http://jdatepicker.com/tour-date-restriction.html

    如果有人知道这样做的简单方法,仍然愿意接受有关使用 JXDatePickers 完成此任务的建议。

    【讨论】:

      【解决方案3】:
      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());
      

      【讨论】:

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

        日期禁用.......

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多