Swing/SortedListModel のバックアップ(No.8)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/SortedListModel へ行く。
- category: swing folder: SortedListModel title: JListのモデルをソートする tags: [JList, ListModel] author: aterai pubdate: 2020-06-08T16:59:00+09:00 description: JListのモデルに追加したアイテムの名前などを条件として昇順・降順ソートを実行します。 image: https://drive.google.com/uc?id=1mT1M-6FPOizXbOEh4iADApE765Hu2jf2
Summary
JListのモデルに追加したアイテムの名前などを条件として昇順・降順ソートを実行します。
Screenshot

Advertisement
Source Code Examples
comparator = Comparator.comparing(ListItem::getTitle);
if (descending.isSelected()) {
comparator = comparator.reversed();
}
List<ListItem> selected = list.getSelectedValuesList();
model.clear();
if (comparator == null) {
Stream.of(defaultModel).forEach(model::addElement);
directionList.forEach(r -> r.setEnabled(false));
} else {
Stream.of(defaultModel).sorted(comparator).forEach(model::addElement);
directionList.forEach(r -> r.setEnabled(true));
}
for (ListItem item : selected) {
int i = model.indexOf(item);
list.addSelectionInterval(i, i);
}
View in GitHub: Java, KotlinExplanation
- 水平ニュースペーパー・スタイルレイアウトを設定した
JListでアイテム(セル)のタイトル文字列やアイコンのカラーコードでソートを実行JRadioButtonが選択されるとComparator<ListItem>を変更して元リストモデルのストリームからStream#sorted(comparator)を実行してソートされた新規リストモデルを作成しているJListデフォルトのセルを垂直方向に1列に並べたレイアウトで一種類のソートを行う場合は、ヘッダを非表示にしたJTableとRowFilterで代用可能
SortNone- アイテムの初期配列(
ListItem[])からソートなしでリストモデルを復元
- アイテムの初期配列(
NameComparator.comparing(ListItem::getTitle)でソートしたリストモデルをJListに設定
ColorComparator.comparing(item -> item.getColor().getRGB())でソートしたリストモデルをJListに設定
Directionascending- 昇順になる
Comparatorを使用
- 昇順になる
descending- 降順になるよう
Comparator#.reversed()を使用してComparatorを変更
- 降順になるよう