gpt4 book ai didi

java - 使用 JCalendar 的特定日期的背景颜色

转载 作者:行者123 更新时间:2023-11-30 05:46:45 25 4
gpt4 key购买 nike

我尝试在 JCalendar 中以不同的颜色设置特定日期,具体取决于我的数据库中是否有针对该日期的计划,该日期在数据库中存储为“yyyy-MM-dd”,我已经看到stackOverflow 上有类似的帖子,但我就是无法让它工作。

我不确定“component[day].setBackground(Color.green)”的工作原理以及如何将其设置为仅在数据库中有计划的日期

    public void kalender() {
Calendar cal = Calendar.getInstance();

cal.set(Calendar.DAY_OF_MONTH, 1);
int offset = cal.get(Calendar.DAY_OF_WEEK);

int mon = kalender.getMonthChooser().getMonth() + 1;

int yr = kalender.getYearChooser().getYear();

JPanel jPanel = kalender.getDayChooser().getDayPanel();

Component component[] = jPanel.getComponents();

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String kalenderdatum = format.format(kalender.getDate());
System.out.println(kalenderdatum);



String sql2 = "SELECT DATUM FROM MOTE";
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(sql2);

while (rs.next()) {
String datumet = rs.getString("DATUM");



String aret = datumet.substring(0, 4);
int year = Integer.parseInt(aret);

String manaden = datumet.substring(5,7);
int month = Integer.parseInt(manaden);

String dagen = datumet.substring(8,10);
int day = Integer.parseInt(dagen);

if(yr == year && mon == month)
{

component[day].setBackground(Color.green);
}

}

最佳答案

使用 JCalendar API 的一种解决方案是创建您自己的 IDateEvaluator 实例,并检查日期是否有任何“特殊”内容。

<强>1。转换

首先,我建议将日期 (yyyy-MM-dd) 放入列表中,并将其转换为 Date 对象。例如:

List<String> mysqlDates = Arrays.asList("2019-02-14", "2019-03-06"); // Assume you've got this info somehow
List<Date> specialDates = convertToDates(mysqlDates);

借助以下函数:

public static List<Date> convertToDates(List<String> dateStrings) throws ParseException {
List<Date> dates = new ArrayList<>();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

for (String dateString : dateStrings) {
dates.add(df.parse(dateString));
}

return dates;
}

<强>2。创建您的 SpecialDateEvaluator

然后,您需要创建自己的日期计算器,该计算器接受将以不同方式处理的 Date 对象。一个简单的例子如下:

public class SpecialDateEvaluator implements IDateEvaluator {

private final List<Date> specialDates;

public SpecialDateEvaluator(List<Date> specialDates) {
this.specialDates = specialDates;
}

@Override
public boolean isSpecial(Date date) {
for (Date d : specialDates) {
if (d.equals(date)) {
return true;
}
}

return false;
}

@Override
public Color getSpecialForegroundColor() {
return Color.black;
}

@Override
public Color getSpecialBackroundColor() {
return Color.red;
}

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

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

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

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

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

<强>3。利用日期评估器

要使用评估器,您需要将其添加到 JDayChooser 中,获取 Date 对象列表,然后再次设置Calendar刷新 View 。例如:

JCalendar c = new JCalendar();
c.getDayChooser().addDateEvaluator(new SpecialDateEvaluator(specialDates));
c.setCalendar(Calendar.getInstance());

要查看完整示例(带有 main 方法),请参阅 this example gist .

关于java - 使用 JCalendar 的特定日期的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54694228/

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