Swing/SortedListModel のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/SortedListModel へ行く。
- 1 (2020-06-08 (月) 17:01:23)
- 2 (2021-11-23 (火) 02:49:59)
- 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
概要
JList
のモデルに追加したアイテムの名前などを条件として昇順・降順ソートを実行します。
Screenshot
Advertisement
サンプルコード
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, Kotlin解説
- 水平ニュースペーパー・スタイルレイアウトを設定した
JList
で、アイテム(セル)のタイトル文字列やアイコンのカラーコードでソートを実行JRadioButton
が選択されるとComparator<ListItem>
を変更して元リストモデルのストリームからStream#sorted(comparator)
を実行してソートされた新規リストモデルを作成しているJList
デフォルトのセルを垂直方向に1
列に並べたレイアウトで一種類のソートを行う場合は、ヘッダを非表示にしたJTable
とRowFilter
で代用可能
Sort
None
- アイテムの初期配列(
ListItem[]
)からソートなしでリストモデルを復元
- アイテムの初期配列(
Name
Comparator.comparing(ListItem::getTitle)
でソートしたリストモデルをJList
に設定
Color
Comparator.comparing(item -> item.getColor().getRGB())
でソートしたリストモデルをJList
に設定
Direction
ascending
- 昇順になる
Comparator
を使用
- 昇順になる
descending
- 降順になるよう
Comparator#.reversed()
を使用してComparator
を変更
- 降順になるよう