【问题标题】:How to show only date after the date of today in JCalendar如何在 JCalendar 中仅显示今天之后的日期
【发布时间】:2012-04-05 01:36:12
【问题描述】:

我试图限制用户只选择今天之后的日期,或者选择另一个日期之后的日期Date 我看到JCalendar API 可以帮助我的东西,但我什么也没找到。我该怎么做?

【问题讨论】:

    标签: java swing date jcalendar


    【解决方案1】:

    我认为组件上没有直接的方法可以做到这一点。 我知道的一种方法是使用setSelectableDateRange(Date from,Date to) - 当您将开始日期设置为当前日期时,所有前一天的单元格、年/月下拉菜单都会被禁用。

    例子:

        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",...);
    

    【讨论】:

    • 最小、最大和范围方法在IDateEditor接口中指定。
    • jcalendar 有两个库。一、方法setSelectableDataRange被定义但addDateListener没有被定义。在另一个中定义了 addDateListener 但没有 setSelectableDataRange .. 我该如何解决?我需要这两种方法。否则,如果我使用定义 setSelectableDateRange 的库,我如何获取用户点击的日期以便将该日期添加到 jtextfield?
    • @user1190704 - 嗯!这很棘手。请在编辑后的答案中查阅代码。
    • 好的,它选择日期,但是将 Jcalendar 添加到 JPopupMenu,在 propertyChangeListener 中,我必须隐藏弹出窗口,当我调用 mypopup.setVisible(false) 时,它会启动 stackoverflowError,我该如何解决它?
    • 你想做什么? - 你可能想解释一下。如果您正在寻找弹出选择器,为什么不使用 JDateChooser 及其 getJCalendar() 呢?
    猜你喜欢
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多