有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在JXDatePicker/JXMonthView中禁用日期

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

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

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


共 (4) 个答案

  1. # 1 楼答案

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

    日期禁用

  2. # 2 楼答案

    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. # 3 楼答案

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

    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)

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

  4. # 4 楼答案

    经过几分钟的研究,JDatePicker似乎可以在这里工作-参见http://jdatepicker.com/tour-date-restriction.html

    不过,如果有人知道一种简单的方法,仍然可以接受使用jxDatePicker实现这一点的建议