• category: swing folder: CalendarWithWeekNumbers title: JListで週番号を表示するカレンダーを作成する tags: [JList, JScrollPane, Calendar] author: aterai pubdate: 2025-10-27T03:22:24+09:00 description: JListを使用して週番号を表示し、JScrollPaneの行ヘッダーとして配置します。 image: https://drive.google.com/uc?id=1o2DCkEDSE31CKsH78xnXfssxqKn4jEfm

Summary

JListを使用して週番号を表示し、JScrollPaneの行ヘッダーとして配置します。

Source Code Examples

class WeekNumberListModel extends AbstractListModel<Integer> {
  private final WeekFields weekFields = WeekFields.of(Locale.getDefault());
  private final LocalDate firstDayOfMonth;

  protected WeekNumberListModel(LocalDate date) {
    super();
    firstDayOfMonth = YearMonth.from(date).atDay(1);
  }

  @Override public int getSize() {
    return CalendarViewListModel.ROW_COUNT;
  }

  @Override public Integer getElementAt(int index) {
    return firstDayOfMonth.plusWeeks(index).get(weekFields.weekOfWeekBasedYear());
  }
}
View in GitHub: Java, Kotlin

Description

  • セルの高さを月カレンダー本体と同じに設定したJListを週番号表示用に作成
    • 週番号表示用JListのセル背景色は週ヘッダーのセル背景色と同じになるよう設定
  • AbstractListModel<Integer>#getElementAt(int index)をオーバーライドして週番号を返すListModelを作成
  • JScrollPane#setRowHeaderView(...)で週番号表示用JListを月カレンダーの左の行ヘッダーに配置
    • 表示する月の切り替えが発生すると月カレンダーのListModel<LocalDate>更新と同様に週番号表示用JListListModel<Integer>も入れ替えて更新する

Reference

Comment