Swing/SortedListModel の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/SortedListModel へ行く。
- 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`のモデルに追加したアイテムの名前などを条件として昇順・降順ソートを実行します。 #download(https://drive.google.com/uc?id=1mT1M-6FPOizXbOEh4iADApE765Hu2jf2) * サンプルコード [#sourcecode] #code(link){{ 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); } }} * 解説 [#explanation] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JList.html#HORIZONTAL_WRAP 水平ニュースペーパー・スタイルレイアウト]を設定した`JList`で、アイテム(セル)のタイトル文字列やアイコンのカラーコードでソートを実行 - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JList.html#HORIZONTAL_WRAP 水平ニュースペーパー・スタイルレイアウト]を設定した`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`を変更 * 参考リンク [#reference] - [[JTreeのソート>Swing/SortTree]] - [[JListのアイテムをフィルタリングして表示>Swing/FilterListItems]] * コメント [#comment] #comment #comment