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