如何解决使用 JComboBox 在 JCalendar 中取消突出显示日期
我正在制作一个带有 MysqL 数据库的 Java GUI 用于考勤记录。我创建了一个 JFrame
来添加新的出勤率。当用户从 JComboBox
中选择主题名称时,代码会验证主题名称,然后从数据库中获取日期并突出显示 JCalendar
中的日期,向用户显示该特定主题的讲座日期。
我面临的问题是,当用户从组合框中选择另一个项目/主题时,框架应该取消突出显示以前的日期,只突出显示新的日期。我正在为此苦苦挣扎。没有在上面找到任何东西。
我的代码:
(HighlightTest
类)
import com.toedter.calendar.IDateEvaluator;
import java.awt.Color;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class HighlightTest {
public static class HighlightEvaluator implements IDateEvaluator {
private final List<Date> list = new ArrayList<>();
public void add(Date date) {
list.add(date);
}
@Override
public boolean isspecial(Date date) {
return list.contains(date);
}
@Override
public Color getSpecialForegroundColor() {
return Color.WHITE;
}
@Override
public Color getSpecialBackroundColor() {
return Color.GREEN;
}
@Override
public String getSpecialTooltip() {
return "Highlighted event.";
}
@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;
}
}
}
(主 JFrame
类)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Calendar;
import java.util.Date;
public final class framer extends javax.swing.JFrame {
/**
* Creates new form framer
*/
public void subjectsFillData(){
try{
Class.forName("com.MysqL.cj.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:MysqL://localhost:3306/dbdb?useSSL=false","root","");
Statement stat = con.createStatement();
String selectQuery="select SubjectName from subjects";
ResultSet rs=stat.executeQuery(selectQuery);
while(rs.next()){
subjects.addItem(rs.getString("SubjectName"));
}
}
catch(Exception e){
System.out.println(e);
}
}
private Date createDate(int d) {
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH,d);
c.set(Calendar.HOUR_OF_DAY,0);
c.set(Calendar.MINUTE,0);
c.set(Calendar.SECOND,0);
c.set(Calendar.MILLISECOND,0);
return (c.getTime());
}
public framer() {
initComponents();
subjectsFillData();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
calEn = new com.toedter.calendar.JCalendar();
sButton = new javax.swing.JButton();
subjects = new javax.swing.JComboBox<>();
setDefaultCloSEOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
sButton.setText("Show");
sButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
sButtonActionPerformed(evt);
}
});
subjects.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
subjectsItemStateChanged(evt);
}
});
//java-swing-code-here
private void sButtonActionPerformed(java.awt.event.ActionEvent evt) {
String subject = (String) subjects.getSelectedItem();
try{
Class.forName("com.MysqL.cj.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:MysqL://localhost:3306/dbdb?useSSL=false","");
Statement stat = con.createStatement();
String searchQuery="select * from "+subject+" ";
ResultSet rs=stat.executeQuery(searchQuery);
while (rs.next()){
String ds = rs.getString(2);
String s = ds.split("-")[0];
int d = Integer.parseInt(s);
HighlightTest.HighlightEvaluator evaluator = new HighlightTest.HighlightEvaluator();
evaluator.add(createDate(d));
evaluator.add(createDate(d));
calEn.getDayChooser().addDateEvaluator(evaluator);
calEn.setCalendar(calEn.getCalendar());
}
}
catch(Exception e){
System.out.println(e);
}
}
private void subjectsItemStateChanged(java.awt.event.ItemEvent evt) {
**// Check if the item is changed and de-highlight prevIoUs dates and highlight new ones.**
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
//GUIeditorfold-code-here
/* Create and display the form */
java.awt.EventQueue.invokelater(new Runnable() {
public void run() {
new framer().setVisible(true);
}
});
}
// Variables declaration - do not modify
private com.toedter.calendar.JCalendar calEn;
private javax.swing.JButton sButton;
private javax.swing.JComboBox<String> subjects;
// End of variables declaration
}
图形界面:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。