1

我正在使用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);
        }
    }
});
4

2 回答 2

2

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

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

我希望它能够响应选择今天的日期,因为日历会指向日记。

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

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

注意:此答案中也对此进行了说明。

于 2014-10-15T11:42:39.227 回答
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(){
     ...
 };
于 2014-10-07T05:43:27.153 回答