Swing/FilterListItems のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/FilterListItems へ行く。
- 1 (2016-09-05 (月) 00:19:37)
- 2 (2016-09-05 (月) 15:28:13)
- 3 (2016-11-24 (木) 20:31:01)
- 4 (2017-02-20 (月) 19:40:38)
- 5 (2017-02-28 (火) 17:51:53)
- 6 (2017-03-29 (水) 13:57:38)
- 7 (2017-10-11 (水) 16:12:27)
- 8 (2017-11-24 (金) 17:58:51)
- 9 (2018-02-15 (木) 14:23:42)
- 10 (2018-02-24 (土) 19:52:42)
- 11 (2019-02-13 (水) 16:32:32)
- 12 (2019-12-24 (火) 20:36:56)
- 13 (2021-06-25 (金) 22:30:02)
- category: swing folder: FilterListItems title: JListのアイテムをフィルタリングして表示 tags: [JList, ListCellRenderer, Pattern] author: aterai pubdate: 2016-09-05T00:18:48+09:00 description: JListのアイテムのタイトル文字列に対して、正規表現による表示フィルタリングを実行します。 image: https://drive.google.com/uc?export=view&id=1po5ebXxijKnGitb-gGFQv-USKEVDS9IaBQ
概要
JList
のアイテムのタイトル文字列に対して、正規表現による表示フィルタリングを実行します。
Screenshot
Advertisement
サンプルコード
DefaultListModel<ListItem> model = new DefaultListModel<>();
JList<ListItem> list = new JList<ListItem>(model) {
@Override public void updateUI() {
setSelectionForeground(null);
setSelectionBackground(null);
setCellRenderer(null);
super.updateUI();
setLayoutOrientation(JList.HORIZONTAL_WRAP);
setVisibleRowCount(0);
setFixedCellWidth(82);
setFixedCellHeight(64);
setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10));
setCellRenderer(new ListItemListCellRenderer<ListItem>());
getSelectionModel().setSelectionMode(
ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
}
};
private void filter() {
getPattern().ifPresent(pattern -> {
for (ListItem item : defaultModel) {
if (pattern.matcher(item.title).find()) {
if (!model.contains(item)) {
model.addElement(item);
}
} else {
model.removeElement(item);
}
}
});
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、ニュースペーパー・スタイルレイアウトに設定したJList
で、アイテム(セル)のタイトル文字列がJTextField
に入力したパターンにマッチするかどうかによる表示のフィルタリングを行っています。
JList
デフォルトのセルを垂直方向に1
列に並べたレイアウトで、フィルタリングを行う場合は、ヘッダを非表示にしたJTable
とRowFilter
で代用することが可能