Swing/ClearSelection のバックアップの現在との差分(No.1)
TITLE:JListの選択を解除
Posted by aterai at 2011-04-18
JListの選択を解除
JListのセル選択状態を解除します。- category: swing folder: ClearSelection title: JListの選択を解除 tags: [JList, Focus, MouseListener] author: aterai pubdate: 2011-04-18T14:47:37+09:00 description: JListのセル選択状態をセル以外の余白領域をクリックすることで解除できるように設定します。 image:
概要
JList
のセル選択状態をセル以外の余白領域をクリックすることで解除できるように設定します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
#spanend
#spanadd
class ClearSelectionListener extends MouseInputAdapter {
#spanend
private boolean startOutside;
#spandel
**サンプルコード [#w9ea8a72]
#spanend
#spandel
#code{{
#spanend
#spandel
class ClearSelectionListener extends MouseAdapter {
#spanend
private static void clearSelectionAndFocus(JList list) {
private static <E> void clearSelectionAndFocus(JList<E> 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;
#spanadd
#spanend
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;
}
private boolean startOuter = false;
#spanadd
#spanend
@Override public void mousePressed(MouseEvent e) {
JList list = (JList)e.getSource();
startOuter = !contains(list, e.getPoint());
if(startOuter) {
JList<?> list = (JList<?>) e.getComponent();
startOutside = !contains(list, e.getPoint());
if (startOutside) {
clearSelectionAndFocus(list);
}
}
#spanadd
#spanend
@Override public void mouseReleased(MouseEvent e) {
startOuter = false;
startOutside = false;
}
#spanadd
#spanend
@Override public void mouseDragged(MouseEvent e) {
JList list = (JList)e.getSource();
if(contains(list, e.getPoint())) {
startOuter = false;
}else if(startOuter) {
JList<?> list = (JList<?>) e.getComponent();
if (contains(list, e.getPoint())) {
startOutside = false;
} else if (startOutside) {
clearSelectionAndFocus(list);
}
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JListのセル以外の領域をクリックすると、選択とフォーカスを解除するようにマウスリスナーなどを設定しています。解説
上記のサンプルでは、JList
のセル以外の領域をクリックするとすべてのセルの選択とフォーカスを解除するようにマウスリスナーなどを設定しています。
- 選択解除
- JList#clearSelection();
- ListSelectionModel#clearSelection() のラッパー
-
JList#clearSelection();
-
ListSelectionModel#clearSelection()
のカバーメソッド
-
- フォーカス解除
- list.getSelectionModel().setAnchorSelectionIndex(-1);
- list.getSelectionModel().setLeadSelectionIndex(-1);
- アンカー、リードの順番で解除する必要がある
-
list.getSelectionModel().setAnchorSelectionIndex(-1);
-
list.getSelectionModel().setLeadSelectionIndex(-1);
- アンカー(アイテムのハイライト)、リード(アイテムのフォーカス)の順番で解除する必要がある