JListで週番号を表示するカレンダーを作成する
Total: 7, Today: 7, Yesterday: 0
Posted by aterai at
Last-modified:
Summary
JListを使用して週番号を表示し、JScrollPaneの行ヘッダーとして配置します。
Screenshot

Advertisement
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, KotlinDescription
- セルの高さを月カレンダー本体と同じに設定した
JListを週番号表示用に作成- 週番号表示用
JListのセル背景色は週ヘッダーのセル背景色と同じになるよう設定
- 週番号表示用
AbstractListModel<Integer>#getElementAt(int index)をオーバーライドして週番号を返すListModelを作成index行目の週番号(暦週の基準年の何週目か)は月の初日にindex週を足して取得したLocalDateからWeekFields.of(Locale).weekOfWeekBasedYear()で取得
JScrollPane#setRowHeaderView(...)で週番号表示用JListを月カレンダーの左の行ヘッダーに配置- 表示する月の切り替えが発生すると月カレンダーの
ListModel<LocalDate>更新と同様に週番号表示用JListのListModel<Integer>も入れ替えて更新する
- 表示する月の切り替えが発生すると月カレンダーの