Swing/LocalDateFilter のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/LocalDateFilter へ行く。
- 1 (2020-09-07 (月) 19:24:36)
- 2 (2022-03-13 (日) 06:16:27)
- category: swing folder: LocalDateFilter title: JTableにLocalDataのフィルタリングを実行するRowFilterを設定する tags: [JTable, RowFilter, TableRowSorter] author: aterai pubdate: 2020-09-07T19:23:43+09:00 description: JTableの列にLocalDataを追加したカレンダーを作成し、指定した期間でその日付をフィルタリングするRowFilterを設定します。 image: https://drive.google.com/uc?id=1eyfSFqFMOcxpCq2TfIRgKNkAKgei4BME
概要
JTable
の列にLocalData
を追加したカレンダーを作成し、指定した期間でその日付をフィルタリングするRowFilter
を設定します。
Screenshot
Advertisement
サンプルコード
public RowFilter<TableModel, Integer> makeRowFilter(String selected) {
switch (selected) {
case "within 3 days before":
return new LocalDateFilter(realLocalDate.minusDays(3).plusDays(1), realLocalDate, 0);
case "within 1 week before":
return new LocalDateFilter(realLocalDate.minusWeeks(1).plusDays(1), realLocalDate, 0);
case "1 week before and after":
return new LocalDateFilter(realLocalDate.minusDays(3), realLocalDate.plusDays(3), 0);
case "within 1 week after":
return new LocalDateFilter(realLocalDate, realLocalDate.plusWeeks(1).minusDays(1), 0);
default:
return null;
}
}
class LocalDateFilter extends RowFilter<TableModel, Integer> {
private final LocalDate startDate;
private final LocalDate endDate;
private final int column;
protected LocalDateFilter(LocalDate startDate, LocalDate endDate, int column) {
super();
this.startDate = startDate;
this.endDate = endDate;
this.column = column;
}
@Override public boolean include(Entry<? extends TableModel, ? extends Integer> entry) {
Object v = entry.getModel().getValueAt(entry.getIdentifier(), column);
if (v instanceof LocalDate) {
LocalDate date = (LocalDate) v;
return !(startDate.isAfter(date) || endDate.isBefore(date));
}
return false;
}
}
View in GitHub: Java, Kotlin解説
0
列目にLocalData
を使用する月カレンダーをJTable
で作成0
列目がLocalData
の場合、指定した開始日と終了日の間に存在する日付だけ表示するRowFilter
を作成してTableRowSorter
に設定LocalData
ではなくjava.util.Date
を使用する場合は、RowFilter
にデフォルトで用意されているRowFilter#dateFilter(RowFilter.ComparisonType, Date, int...)が使用可能
- フィルタリングのリセットには
TableRowSorter.setRowFilter(null)
を使用
参考リンク
- java - How can i use RowFilter.dateFilter on LocalDate columns - Stack Overflow
- JTableのセルに設定した日付をRegexFilterでフィルタリングする