Я использую Toeder JDateChooser
в своем автономном приложении Java, как показано в фрагменте кода ниже.Цель здесь:
- Чтобы переместить экземпляр календаря на желаемую неделю года, а затем
- Чтобы установить дату начала и дату окончания желаемой неделисоответственно.Эти даты хранятся в двух экземплярах JDateChooser, а именно:
jDateChooserBookBegin
и jDateChooserBookEnd
.
Calendar c = Calendar.getInstance();
int currentWeekOfYear = c.get(Calendar.WEEK_OF_YEAR);
int desiredWeekOfYear = jComboBookWeekMainPanel.getSelectedIndex() + 1;
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
for (int i = currentWeekOfYear; i < desiredWeekOfYear; i++) {
c.add(Calendar.DAY_OF_WEEK, 7); //e.g. set to next Monday
}
jDateChooserBookBegin.setDate(c.getTime()); // ***** HERE *****
c.add(Calendar.DAY_OF_WEEK, 6); //set to the end of week e.g. Sunday
jDateChooserBookEnd.setDate(c.getTime());
Проблема: допустим, приведенный выше фрагмент кода выполняется внутри метода.Я проверил код в режиме отладки в neatbeans и клянусь, когда выполнение достигает строки, отмеченной пунктирной стрелкой, остальные строки вообще не выполняются, и инкапсулирующий метод немедленно возвращается вызывающей стороне.Это приводит к тому, что jDateChooserBookEnd
не устанавливается на правильную дату, и моя программа в результате ведет себя нежелательным образом.
Вопрос: Почему метод setDate
класса JDateChooser
вызывает остальную частьстроки не должны быть выполнены, возвращаясь к вызывающей стороне?Есть ли известная ошибка в этом?Есть ли у вас какие-либо подсказки?Это выглядит довольно невозможно, но это происходит.Я использую Java 6.
Полное содержание метода доступно ниже.Приведенный выше фрагмент является упрощенной версией того, что вы видите ниже.В программе у меня есть два jButton, названных на следующей неделе и на предыдущей неделе.При каждом нажатии одной из этих кнопок соответствующий метод actionPerformed вызывает метод ниже.
private void update_DateFieldsInMainPanel() {
Calendar c = Calendar.getInstance();
int currentWeekOfYear = c.get(Calendar.WEEK_OF_YEAR);
int desiredWeekOfYear = jComboBookWeekMainPanel.getSelectedIndex() + 1; c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
if (desiredWeekOfYear ==currentWeekOfYear) {
jDateChooserBokMainFrom.setDate(c.getTime());
c.add(Calendar.DAY_OF_WEEK, 6);
jDateChooserBokMainTill.setDate(c.getTime());
}
else if (desiredWeekOfYear > currentWeekOfYear) {
for (int i = currentWeekOfYear; i < desiredWeekOfYear; i++) {
c.add(Calendar.DAY_OF_WEEK, 7);
}
jDateChooserBokMainFrom.setDate(c.getTime());
c.add(Calendar.DAY_OF_WEEK, 6);
jDateChooserBokMainTill.setDate(c.getTime());
}
else {
for (int i = currentWeekOfYear; i > desiredWeekOfYear; i--) {
c.add(Calendar.DAY_OF_WEEK, -7);
}
jDateChooserBokMainFrom.setDate(c.getTime());
c.add(Calendar.DAY_OF_WEEK, 6);
jDateChooserBokMainTill.setDate(c.getTime());
}
}