Swing/ClearSelection のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ClearSelection へ行く。
- 1 (2011-04-18 (月) 14:47:37)
- 2 (2011-04-19 (火) 13:59:30)
- 3 (2012-12-22 (土) 15:58:00)
- 4 (2014-11-12 (水) 02:09:03)
- 5 (2015-01-22 (木) 21:18:17)
- 6 (2015-02-18 (水) 15:04:15)
- 7 (2016-12-03 (土) 18:28:31)
- 8 (2017-04-04 (火) 14:17:08)
- 9 (2017-12-01 (金) 13:21:53)
- 10 (2019-08-08 (木) 18:57:58)
- 11 (2021-04-09 (金) 19:43:33)
- 12 (2021-11-24 (水) 06:33:00)
- 13 (2025-01-03 (金) 08:57:02)
- 14 (2025-01-03 (金) 09:01:23)
- 15 (2025-01-03 (金) 09:02:38)
- 16 (2025-01-03 (金) 09:03:21)
- 17 (2025-01-03 (金) 09:04:02)
TITLE:JListの選択を解除
Posted by aterai at 2011-04-18
JListの選択を解除
JListのセル選択状態を解除します。
- &jnlp;
- &jar;
- &zip;
サンプルコード
class ClearSelectionListener extends MouseAdapter {
private static void clearSelectionAndFocus(JList list) {
list.clearSelection();
list.getSelectionModel().setAnchorSelectionIndex(-1);
list.getSelectionModel().setLeadSelectionIndex(-1);
}
private static boolean contains(JList list, Point pt) {
for(int i=0;i<list.getModel().getSize();i++) {
Rectangle r = list.getCellBounds(i, i);
if(r.contains(pt)) return true;
}
return false;
}
private boolean startOuter = false;
@Override public void mousePressed(MouseEvent e) {
JList list = (JList)e.getSource();
startOuter = !contains(list, e.getPoint());
if(startOuter) {
clearSelectionAndFocus(list);
}
}
@Override public void mouseReleased(MouseEvent e) {
startOuter = false;
}
@Override public void mouseDragged(MouseEvent e) {
JList list = (JList)e.getSource();
if(contains(list, e.getPoint())) {
startOuter = false;
}else if(startOuter) {
clearSelectionAndFocus(list);
}
}
}
解説
上記のサンプルでは、JListのセル以外の領域をクリックすると、選択とフォーカスを解除するようにマウスリスナーなどを設定しています。
- 選択解除
- JList#clearSelection();
- ListSelectionModel#clearSelection() のラッパー
- フォーカス解除
- list.getSelectionModel().setAnchorSelectionIndex(-1);
- list.getSelectionModel().setLeadSelectionIndex(-1);
- アンカー、リードの順番で解除する必要がある