问题描述
在我的情况下,我想在Java日历中禁用或突出显示日期。我使用 JCalendar
和 DateChooserCombo
,但找不到办法。最后,我尝试了下面的代码,但也没有成功。
In my case i want to disable or highlight dates in Java calendar. I used JCalendar
and DateChooserCombo
and could not find a way to do it. Finally, I tried the below code and it also was not successful.
例如:我想禁用从 14-09-13
到的所有日期23-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
接口,该接口用于验证日期是特殊还是无效。不幸的是,库只提供了一个具体的实现,它是 MinMaxDateEvaluator
class,但以此为起点并不复杂。
I know this has been inactive for a while but hopefully it can be useful to someone. The key here is implement IDateEvaluator
interface which is intended to validate if a date is special or invalid. Unfortunately there's only one concrete implementation provided with JCalendar library which is MinMaxDateEvaluator
class, but taking this as start point is not so complicated.
下面是一个实现示例,请特别注意 isInvalid(Date date)
方法。您还可以查看 DateUtil
类,它也是 JCalendar
库的一部分。
Here is an example of implementation, please pay special attention to isInvalid(Date date)
method. Also you may want to look at DateUtil
class which is also part of JCalendar
library.
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
class
下面有一个使用 RangeEvaluator
类的例子。请注意,9月14日至9月23日的范围被禁用。
Using RangeEvaluator
class
There is an example of using RangeEvaluator
class below. Please note the range from September 14th to September 23rd is disabled.
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
屏幕截图
Screenshot
这篇关于如何在JCalendar中禁用或突出显示日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!