JCalendar和PropertyChangeListener:当天没有触发事件

时间:2014-10-07 00:49:26

标签: java swing jcalendar jdatechooser

我正在使用JCalendar并使用PropertyChangeListener设置了一个监听器。我的问题是这个监听器不会响应当天的事件,我假设因为该属性没有变化。我希望它能够回应选择今天的日期,因为日历会导致日记。打开时,我仍然希望日历在“今天”的日期打开,但是要有一个响应按下“今天”日期的听众。我的听众代码如下:

final JCalendar calendar = new JCalendar();

calendar.getDayChooser().addPropertyChangeListener("day", new PropertyChangeListener() {
    @Override
    public void propertyChange(PropertyChangeEvent e) {

        if(Calendar.AddJob!=1){
            JOptionPane.showMessageDialog(null,"No Entry Found");
            frame.dispose();
            String date = EditDate(calendar.getDate().toString());
            WorkDiary.WorkDiaryGui(date);
        }

        if(Calendar.AddJob==1){
            String date = EditDate(calendar.getDate().toString());  
            Calendar.AddJob=0;
            frame.dispose();
            WorkDiaryAddJob.WorkDiaryAddJobGui(CalReg, date);
        }
    }
});

2 个答案:

答案 0 :(得分:1)

  

我的问题是这个监听器不会响应当天的事件,我假设因为属性没有变化。

您的假设是正确的:如果按下选定日期(即今天)的按钮,日选择器不会触发一天的属性更改。它是有道理的,因为该属性实际上并没有改变。

  

我希望它能够回应选择今天的日期,因为日历会导致日记。

要修改上述行为,我们可以使用setAlwaysFireDayProperty(boolean alwaysFire)方法强制日期选择器始终触发属性更改事件:

JCalendar calendar = new JCalendar();        
JDayChooser dayChooser = calendar.getDayChooser();
dayChooser.setAlwaysFireDayProperty(true); // here is the key
dayChooser.addPropertyChangeListener("day", ...);

注意:this answer中也对此进行了解释。

答案 1 :(得分:0)

我认为你必须添加一个ActionListener而不是PropertyChangeListener ...

请参阅http://max-server.myftp.org/jcalendar/ibuild/dist/doc/api/com/toedter/calendar/JDayChooser.html#actionPerformed%28java.awt.event.ActionEvent%29

它说:“JDayChooser是全天按钮的ActionListener”(在ActionListener上)

 calendar.getDayChooser().addActionListener(new ActionListener(){
     ...
 };