2

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

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

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

4

4 回答 4

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)

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

于 2012-11-05T05:21:46.433 回答
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());
于 2014-06-02T06:04:03.290 回答
0

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

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

于 2012-11-05T05:06:59.953 回答
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);

日期禁用.......

于 2019-05-08T15:30:29.793 回答