如何为JDateChooser设置关联航班目的地的星期几选日期限制
JDateChooser 特定星期几日期限制实现方案
要实现JDateChooser仅允许选择指定星期几的日期,核心是通过JDateChooser依赖的DateEvaluator接口自定义日期校验逻辑,具体步骤如下:
1. 自定义日期校验器
创建实现DateEvaluator的类,重写isValid(Date date)方法,判断当前日期的星期是否在允许的列表中:
import com.toedter.calendar.DateEvaluator; import com.toedter.calendar.JDateChooser; import java.util.Calendar; import java.util.Date; import java.util.HashSet; import java.util.Set; class WeekdayDateEvaluator implements DateEvaluator { private final Set<Integer> allowedWeekdays; public WeekdayDateEvaluator(Set<Integer> allowedWeekdays) { this.allowedWeekdays = allowedWeekdays; } @Override public boolean isValid(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); // 获取当前日期对应的星期(Calendar.DAY_OF_WEEK取值为1=周日,2=周一,...,7=周六) int weekday = cal.get(Calendar.DAY_OF_WEEK); return allowedWeekdays.contains(weekday); } @Override public String getInvalidTooltip() { return "仅可选择指定星期的日期"; } // 以下方法按需实现默认值即可 @Override public boolean isSpecial(Date date) { return false; } @Override public String getSpecialTooltip() { return null; } @Override public String getSpecialForegroundColor() { return null; } @Override public String getSpecialBackgroundColor() { return null; } }
2. 绑定校验器到JDateChooser
以你提到的「选择巴黎时仅允许周一、周三」为例,在目的地选择的触发逻辑中(比如下拉框选择事件),创建校验器并绑定到JDateChooser:
// 假设已初始化JDateChooser实例jDateChooser // 定义允许的星期几(周一=Calendar.MONDAY,周三=Calendar.WEDNESDAY) Set<Integer> allowedDays = new HashSet<>(); allowedDays.add(Calendar.MONDAY); allowedDays.add(Calendar.WEDNESDAY); // 创建自定义校验器 WeekdayDateEvaluator parisEvaluator = new WeekdayDateEvaluator(allowedDays); // 清空原有校验器(避免冲突) jDateChooser.getJCalendar().removeAllDateEvaluators(); // 添加新的校验器 jDateChooser.getJCalendar().addDateEvaluator(parisEvaluator);
3. 多目的地切换逻辑
如果需要针对不同目的地设置不同的星期限制,只需在目的地选择组件的事件监听器中,重复上述创建校验器并替换的逻辑即可。
内容的提问来源于stack exchange,提问作者Bohdan Zachepa
相关产品推荐
相关产品推荐

