【问题标题】:How can i make only mondays selectable in Java's JCalendar?如何在 Java 的 JCalendar 中只选择星期一?
【发布时间】:2018-04-28 20:07:51
【问题描述】:

我正在使用 JCalendar 日期选择器,想知道是否有办法通过 JDateChooser 组件只选择某些工作日(例如星期一)?

有人知道怎么做吗?

【问题讨论】:

标签: java jdatechooser jcalendar


【解决方案1】:

下面是一个将其实现为DayOfWeekEvaluator 接受DayOfWeek 对象列表的示例:

import com.toedter.calendar.IDateEvaluator;
import java.awt.Color;
import java.time.DayOfWeek;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class DayOfWeekEvaluator implements IDateEvaluator {

    private final List<DayOfWeek> validDaysOfWeek;

    public DayOfWeekEvaluator(List<DayOfWeek> validDaysOfWeek) {
        this.validDaysOfWeek = validDaysOfWeek;
    }

    private DayOfWeek determineDayOfWeek(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
        return DayOfWeek.of(convertSundayFirstToMondayFirst(dayOfWeek));
    }

    private int convertSundayFirstToMondayFirst(int sundayFirstValue) {
        // Converts from weeks that are Sunday-Saturday (1-7)
        // to weeks that are Monday-Sunday (1-7)
        if (sundayFirstValue == 1) {
            return 7;
        }
        return sundayFirstValue - 1;
    }

    @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) {
        DayOfWeek dayOfWeek = determineDayOfWeek(date);
        return !validDaysOfWeek.contains(dayOfWeek);
    }

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

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

    @Override
    public String getInvalidTooltip() {
        return null;
    }

}

逻辑在isInvalid 中使用的私有方法中。示例用法可以是:

List<DayOfWeek> validDaysOfWeek = Arrays.asList(DayOfWeek.MONDAY, DayOfWeek.THURSDAY);
JCalendar c = new JCalendar();
c.getDayChooser().addDateEvaluator(new DayOfWeekEvaluator(validDaysOfWeek));
c.setCalendar(Calendar.getInstance());

要查看完整示例(使用 main 方法),请参阅 this example gist

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多