Java 如何在JCalendar中仅显示今天日期之后的日期

Java 如何在JCalendar中仅显示今天日期之后的日期,java,swing,date,jcalendar,Java,Swing,Date,Jcalendar,我试图限制用户只选择今天之后的日期,或者选择另一个日期之后的日期 我明白了 一些可以帮助我的东西,但我什么也没找到。。我怎样才能做到这一点?我认为在组件上没有直接的方法可以做到这一点。 我知道的一种方法是使用setSelectableDateRangeDate from,Date to-当您将from日期设置为当前日期时,所有前一天单元格的year/month下拉列表都将被禁用 例如: JCalendar calendar = new JCalendar(); calendar.

我试图限制用户只选择今天之后的日期,或者选择另一个日期之后的日期 我明白了
一些可以帮助我的东西,但我什么也没找到。。我怎样才能做到这一点?

我认为在组件上没有直接的方法可以做到这一点。 我知道的一种方法是使用setSelectableDateRangeDate from,Date to-当您将from日期设置为当前日期时,所有前一天单元格的year/month下拉列表都将被禁用

例如:

    JCalendar calendar = new JCalendar();
    calendar.setSelectableDateRange(new Date(),new SimpleDateFormat("MM-DD-YYYY").parse("05-05-2015"));

    PropertyChangeListener calendarChangeListener  = new PropertyChangeListener() {
        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            Date selectedDate = ((JCalendar)evt.getSource()).getDate();
        }
    };
    calendar.addPropertyChangeListener("calendar",calendarChangeListener);
这将禁用选择当前日期之前和2015年5月5日之后的任何日期

注意,这个API没有在他们的javadoc中记录。但这仍然是一个公众设定者,正如预期的那样工作

编辑,因为您想知道如何在类似的上下文中使用JDateChooser

    JDateChooser chooser = new JDateChooser();
    chooser.getJCalendar().setSelectableDateRange(new Date(),new SimpleDateFormat("MM-DD-YYYY").parse("05-05-2015"));
    chooser.getJCalendar().addPropertyChangeListener("calendar",...);

我不认为有一个直截了当的方法来实现这一点。 我知道的一种方法是使用setSelectableDateRangeDate from,Date to-当您将from日期设置为当前日期时,所有前一天单元格的year/month下拉列表都将被禁用

例如:

    JCalendar calendar = new JCalendar();
    calendar.setSelectableDateRange(new Date(),new SimpleDateFormat("MM-DD-YYYY").parse("05-05-2015"));

    PropertyChangeListener calendarChangeListener  = new PropertyChangeListener() {
        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            Date selectedDate = ((JCalendar)evt.getSource()).getDate();
        }
    };
    calendar.addPropertyChangeListener("calendar",calendarChangeListener);
这将禁用选择当前日期之前和2015年5月5日之后的任何日期

注意,这个API没有在他们的javadoc中记录。但这仍然是一个公众设定者,正如预期的那样工作

编辑,因为您想知道如何在类似的上下文中使用JDateChooser

    JDateChooser chooser = new JDateChooser();
    chooser.getJCalendar().setSelectableDateRange(new Date(),new SimpleDateFormat("MM-DD-YYYY").parse("05-05-2015"));
    chooser.getJCalendar().addPropertyChangeListener("calendar",...);

最小、最大和范围方法在IDateEdit接口中指定。jcalendar有两个库。在一种方法中,方法setSelectableDataRange已定义,但没有在addDateListener中定义。在另一个示例中,定义了addDateListener,但未定义setSelectableDataRange。。我怎样才能解决它?我需要这两种方法。否则,如果我使用定义为setSelectableDateRange的库,如何从用户处获取单击的日期,以便将该日期添加到jtextfield?@user1190704-Hm!这很棘手。请参考编辑答案中的代码。好的,它选择日期,但由于Jcalendar被添加到JPOppMenu中,在propertyChangeListener中,我必须隐藏弹出窗口,当我调用mypopup.setVisiblefalse时,它会启动StackOverflower,我如何解决它?你想做什么你可能想解释一下。如果要查找弹出式选择器,为什么不使用JDateChooser及其getJCalendar?在IDateEdit接口中指定了Min、max和range方法。jcalendar有两个库。在一种方法中,方法setSelectableDataRange已定义,但没有在addDateListener中定义。在另一个示例中,定义了addDateListener,但未定义setSelectableDataRange。。我怎样才能解决它?我需要这两种方法。否则,如果我使用定义为setSelectableDateRange的库,如何从用户处获取单击的日期,以便将该日期添加到jtextfield?@user1190704-Hm!这很棘手。请参考编辑答案中的代码。好的,它选择日期,但由于Jcalendar被添加到JPOppMenu中,在propertyChangeListener中,我必须隐藏弹出窗口,当我调用mypopup.setVisiblefalse时,它会启动StackOverflower,我如何解决它?你想做什么你可能想解释一下。如果您正在寻找弹出式选择器,为什么不使用JDateChooser及其getJCalendar呢?