我正在使用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);
}
}
});
答案 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 ...
它说:“JDayChooser是全天按钮的ActionListener”(在ActionListener上)
calendar.getDayChooser().addActionListener(new ActionListener(){
...
};