概要
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
を変更
- 降順になるよう