JListの選択を解除
Total: 7753
, Today: 2
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
JList
のセル選択状態をセル以外の余白領域をクリックすることで解除できるように設定します。
Screenshot
Advertisement
サンプルコード
class ClearSelectionListener extends MouseInputAdapter {
private boolean startOutside;
private static <E> void clearSelectionAndFocus(JList<E> list) {
list.clearSelection();
list.getSelectionModel().setAnchorSelectionIndex(-1);
list.getSelectionModel().setLeadSelectionIndex(-1);
}
private static <E> boolean contains(JList<E> list, Point pt) {
for (int i = 0; i < list.getModel().getSize(); i++) {
if (list.getCellBounds(i, i).contains(pt)) {
return true;
}
}
return false;
}
@Override public void mousePressed(MouseEvent e) {
JList<?> list = (JList<?>) e.getComponent();
startOutside = !contains(list, e.getPoint());
if (startOutside) {
clearSelectionAndFocus(list);
}
}
@Override public void mouseReleased(MouseEvent e) {
startOutside = false;
}
@Override public void mouseDragged(MouseEvent e) {
JList<?> list = (JList<?>) e.getComponent();
if (contains(list, e.getPoint())) {
startOutside = false;
} else if (startOutside) {
clearSelectionAndFocus(list);
}
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JList
のセル以外の領域をクリックするとすべてのセルの選択とフォーカスを解除するようにマウスリスナーなどを設定しています。
- 選択解除
JList#clearSelection();
ListSelectionModel#clearSelection()
のカバーメソッド
- フォーカス解除
list.getSelectionModel().setAnchorSelectionIndex(-1);
list.getSelectionModel().setLeadSelectionIndex(-1);
- アンカー(アイテムのハイライト)、リード(アイテムのフォーカス)の順番で解除する必要がある
参考リンク
- How to Write a List Selection Listener (The Java™ Tutorials > Creating a GUI With JFC/Swing > Writing Event Listeners)
- JList#clearSelection() (Java Platform SE 8)
- ListSelectionModel#clearSelection() (Java Platform SE 8)