gpt4 book ai didi

java - 如何禁用或突出显示 JCalendar 中的日期

转载 作者:行者123 更新时间:2023-12-02 14:45:29 25 4
gpt4 key购买 nike

就我而言,我想禁用或突出显示 Java 日历中的日期。我使用了 JCalendar 和 DateChooserCombo 但找不到方法。最后,我尝试了下面的代码,但也没有成功。

例如:我想禁用从 14-09-1323-09-13 的所有日期。

DateFormat formatter = new SimpleDateFormat("yyyy-mm-dd");
try {
Date d1 = formatter.parse("2013-09-14");
Date d2 = formatter.parse("2013-09-23");
jCalendar1.setSelectableDateRange(d1, d2);
} catch (ParseException ex) {
ex.printStackTrace();
}

最佳答案

我知道这已经有一段时间不活跃了,但希望它对某人有用。这里的关键是实现 IDateEvaluator 接口(interface),该接口(interface)旨在验证日期是否特殊或无效。不幸的是,JCalendar 只提供了一种具体实现。库是 MinMaxDateEvaluator 类,但以此为起点并不那么复杂。

范围评估器

这里是一个实现示例,请特别注意isInvalid(Date date)方法。另外,您可能想查看 DateUtil 类,它也是 JCalendar 库的一部分。

class RangeEvaluator implements IDateEvaluator {

private DateUtil dateUtil = new DateUtil();

@Override
public boolean isSpecial(Date date) {
return false;
}

@Override
public Color getSpecialForegroundColor() {
return null;
}

@Override
public Color getSpecialBackroundColor() {
return null;
}

@Override
public String getSpecialTooltip() {
return null;
}
@Override
public boolean isInvalid(Date date) {
return dateUtil.checkDate(date);
// if the given date is in the range then is invalid
}

/**
* Sets the initial date in the range to be validated.
* @param startDate
*/
public void setStartDate(Date startDate) {
dateUtil.setMinSelectableDate(startDate);
}

/**
* @return the initial date in the range to be validated.
*/
public Date getStartDate() {
return dateUtil.getMinSelectableDate();
}

/**
* Sets the final date in the range to be validated.
* @param endDate
*/
public void setEndDate(Date endDate) {
dateUtil.setMaxSelectableDate(endDate);
}

/**
* @return the final date in the range to be validated.
*/
public Date getEndDate() {
return dateUtil.getMaxSelectableDate();
}
}

使用RangeEvaluator

下面有一个使用 RangeEvaluator 类的示例。请注意,9 月 14 日至 9 月 23 日的范围已被禁用。

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

RangeEvaluator evaluator = new RangeEvaluator();
evaluator.setStartDate(dateFormat.parse("2013-09-14"));
evaluator.setEndDate(dateFormat.parse("2013-09-23"));

JCalendar calendar = new JCalendar(Locale.US);
calendar.getDayChooser().addDateEvaluator(evaluator); // evaluator must be added to a JDayChooser object

屏幕截图

enter image description here

关于java - 如何禁用或突出显示 JCalendar 中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18820257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com