使用 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                   
}

图形界面:

JFrame

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)