Swing/RegexDateFilter のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/RegexDateFilter へ行く。
- 1 (2016-04-12 (火) 14:35:12)
- 2 (2016-04-13 (水) 17:40:26)
- 3 (2016-04-15 (金) 16:19:40)
- 4 (2017-04-04 (火) 14:13:45)
- 5 (2017-08-01 (火) 13:46:50)
- 6 (2017-12-01 (金) 18:52:49)
- 7 (2019-05-22 (水) 19:35:38)
- 8 (2019-08-15 (木) 16:06:44)
- 9 (2021-04-16 (金) 11:58:12)
- 10 (2025-01-03 (金) 08:57:02)
- 11 (2025-01-03 (金) 09:01:23)
- 12 (2025-01-03 (金) 09:02:38)
- 13 (2025-01-03 (金) 09:03:21)
- 14 (2025-01-03 (金) 09:04:02)
- title: JTableのセルに設定した日付をRegexFilterでフィルタリングする tags: [JTable, RowFilter, Date] author: aterai pubdate: 2016-04-11T00:24:26+09:00 description: JTableのセルに設定した日付をRegexFilterなどでフィルタリングするテストを行います。
概要
JTable
のセルに設定した日付をRegexFilter
などでフィルタリングするテストを行います。
Screenshot

Advertisement
サンプルコード
ActionListener al = e -> {
Object o = e.getSource();
String txt = field.getText();
if (r1.equals(o)) {
sorter.setRowFilter(RowFilter.regexFilter(txt));
} else if (r2.equals(o)) {
sorter.setRowFilter(new RegexDateFilter(Pattern.compile(txt)));
} else {
sorter.setRowFilter(null);
}
};
class RegexDateFilter extends RowFilter<TableModel, Integer> {
private final Matcher matcher;
protected RegexDateFilter(Pattern pattern) {
super();
this.matcher = pattern.matcher("");
}
@Override public boolean include(
Entry<? extends TableModel, ? extends Integer> entry) {
TableModel m = entry.getModel();
for (int i = 0; i < m.getColumnCount(); i++) {
Object v = entry.getValue(i);
if (v instanceof Date) {
matcher.reset(DateFormat.getDateInstance().format(v));
} else {
matcher.reset(entry.getStringValue(i));
}
if (matcher.find()) {
return true;
}
}
return false;
}
}
View in GitHub: Java, Kotlin解説
null
- フィルタをクリア
RowFilter.regexFilter
RowFilter.regexFilter(txt)
を設定- 以下のように、
RowFilter.regexFilter
ではDate#toString()
メソッドが使用され、セルに表示されている文字列ではフィルタリングされない//@see javax/swing/RowFilter.java public static abstract class Entry<M, I> { //... public String getStringValue(int index) { Object value = getValue(index); return (value == null) ? "" : value.toString(); } //...
- 例:
12
ではすべての行が非表示だが、Dec
では二行表示される
new RowFilter()
RowFilter<TableModel, Integer>
を継承するフィルタを作成して設定- このフィルタでは、以下のように、
DateRenderer
が表示に使用しているデフォルトのDateFormat
を使用してDate
を文字列に変換し、フィルタリングを行う//@see javax/swing/JTable.java static class DateRenderer extends DefaultTableCellRenderer.UIResource { public void setValue(Object value) { //... DateFormat formatter = DateFormat.getDateInstance(); setText((value == null) ? "" : formatter.format(value)); } }