JDateChooser
以下のコード スニペットに示すように、スタンドアロン Java アプリケーションでToeder を使用しています。ここでの目的は次のとおりです。
- カレンダー インスタンスをその年の目的の週にシフトしてから、
- それに応じて、希望する週の開始日と終了日を設定します。
jDateChooserBookBegin
これらの日付は、とという 2 つの JDateChooser インスタンスに保持されます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を使用しています。
メソッドの完全な内容は以下で入手できます。上記のスニペットは、以下に表示されるものを簡略化したものです。プログラムには、来週と前の週という名前の 2 つの 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());
}
}