在JXDatePicker / JXMonthView中禁用日期

时间:2012-11-05 04:55:56

标签: java swing swingx

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

我发现JXDatePickers包含一个JXMonthView,似乎日期选择器或月份视图不允许您禁用个别/日期范围。我可以更改各个日期和日期范围的背景颜色,这样我就可以将未来的日期作为单独的颜色。然后,只要用户单击日历以禁止将来的日期,我就可以添加一些验证。但是,如果我能说一下像calendar.setMaxDate(今天)这样的话会更加清晰;

有人知道是否有一种比手动编码功能更简单的方法吗?也许另一个日期选择器组件修复了这个问题?

4 个答案:

答案 0 :(得分:5)

如果要将日期选择限制为仅范围,可以指定上限和下限

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)

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

答案 1 :(得分:0)

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

尽管如此,如果有人知道这样做的简单方法,仍然可以使用JXDatePickers完成此项建议。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

禁用日期....