Java 如何在JDateChooser中突出显示JCalendar中的日期?
我使用的是一个来自外部库toedter(jcalendar1.4)的JDateChooser组件。我通过实现IDateEvaluator使用了自定义DateEvaluator,IDateEvaluator后来添加到JDateChooser组件中:Java 如何在JDateChooser中突出显示JCalendar中的日期?,java,swing,Java,Swing,我使用的是一个来自外部库toedter(jcalendar1.4)的JDateChooser组件。我通过实现IDateEvaluator使用了自定义DateEvaluator,IDateEvaluator后来添加到JDateChooser组件中: public static class HighlightEvaluator implements IDateEvaluator { private final List<Date> list = new ArrayList<
public static class HighlightEvaluator implements IDateEvaluator {
private final List<Date> list = new ArrayList<>();
public void add(Date date) {
list.add(date);
}
public void remove(Date date) {
list.remove(date);
}
public void setDates(List<Date> dates) {
list.addAll(dates);
}
@Override
public Color getInvalidBackroundColor() {
return Color.BLACK;
}
@Override
public Color getInvalidForegroundColor() {
return null;
}
@Override
public String getInvalidTooltip() {
return null;
}
@Override
public Color getSpecialBackroundColor() {
return Color.GREEN;
}
@Override
public Color getSpecialForegroundColor() {
return Color.RED;
}
@Override
public String getSpecialTooltip() {
return "filled";
}
@Override
public boolean isInvalid(Date date) {
return false;
}
@Override
public boolean isSpecial(Date date) {
return list.contains(date);
}
}
公共静态类HighlightEvaluator实现IDateEvaluator{
私有最终列表=新的ArrayList();
公共作废添加(日期){
列表。添加(日期);
}
公共作废删除(日期){
删除(日期);
}
公共作废设置日期(列表日期){
列表。添加所有(日期);
}
@凌驾
公共颜色getInvalidBackroundColor(){
返回颜色:黑色;
}
@凌驾
公共颜色getInvalidForegroundColor(){
返回null;
}
@凌驾
公共字符串getInvalidTooltip(){
返回null;
}
@凌驾
公共颜色getSpecialBackroundColor(){
返回颜色。绿色;
}
@凌驾
公共颜色getSpecialForegroundColor(){
返回颜色:红色;
}
@凌驾
公共字符串getSpecialTooltip(){
返回“已填写”;
}
@凌驾
公共布尔值isInvalid(日期){
返回false;
}
@凌驾
公共布尔值是特殊的(日期){
返回列表。包含(日期);
}
}
这是我的主要方法:
publicstaticvoidmain(){
JDateChooser dateChooser=新的JDateChooser();
列表日期=新建ArrayList();
添加(新日期());
HighlightEvaluator evaluator=新的HighlightEvaluator();
评估者。设定日期(日期);
dateChooser.getJCalendar().getDayChooser().addDateEvaluator(evaluator);
}
现在代码应该突出显示当前日期,但它没有突出显示。请告诉我此问题的解决方法您需要稍微更改日期变量。创建日期变量时,它会获取当前日期、月份、年份以及时间(小时、分钟、秒、毫秒) 不过,将同一日期设置为evaluator将不起作用,因为evaluator希望该日期并没有时间详细信息。因此,您也可以在主功能中使用Calendar对象,如下所示:
public static void main(){
JDateChooser dateChooser = new JDateChooser();
List<Date> dates = new ArrayList<Date>();
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, desiredyear);
c.set(Calendar.MONTH, desiredmonth);
c.set(Calendar.DAY_OF_MONTH, desiredday);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
dates.add(c.getTime());
HighlightEvaluator evaluator = new HighlightEvaluator();
evaluator.setDates(dates);
dateChooser.getJCalendar().getDayChooser().addDateEvaluator(evaluator);
}
publicstaticvoidmain(){
JDateChooser dateChooser=新的JDateChooser();
列表日期=新建ArrayList();
Calendar c=Calendar.getInstance();
c、 设置(日历年、期望年);
c、 设置(日历月、期望月);
c、 设置(日历日/月/日,所需日期);
c、 设置(日历小时/天,0);
c、 设置(日历分钟,0);
c、 设置(日历秒,0);
c、 设置(日历毫秒,0);
dates.add(c.getTime());
HighlightEvaluator evaluator=新的HighlightEvaluator();
评估者。设定日期(日期);
dateChooser.getJCalendar().getDayChooser().addDateEvaluator(evaluator);
}
public static void main(){
JDateChooser dateChooser = new JDateChooser();
List<Date> dates = new ArrayList<Date>();
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, desiredyear);
c.set(Calendar.MONTH, desiredmonth);
c.set(Calendar.DAY_OF_MONTH, desiredday);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
dates.add(c.getTime());
HighlightEvaluator evaluator = new HighlightEvaluator();
evaluator.setDates(dates);
dateChooser.getJCalendar().getDayChooser().addDateEvaluator(evaluator);
}