Swing/ListMouseSelection のバックアップソース(No.4)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/ListMouseSelection へ行く。
- 1 (2011-07-18 (月) 17:21:18)
- 2 (2011-07-19 (火) 12:24:06)
- 3 (2011-07-20 (水) 13:15:30)
- 4 (2011-07-20 (水) 19:33:29)
- 5 (2011-07-22 (金) 15:59:14)
- 6 (2011-07-24 (日) 07:58:36)
- 7 (2011-07-27 (水) 10:52:51)
- 8 (2011-07-27 (水) 13:13:20)
- 9 (2011-07-27 (水) 14:50:02)
- 10 (2012-05-30 (水) 15:18:25)
- 11 (2012-12-19 (水) 22:11:36)
- 12 (2012-12-27 (木) 14:16:01)
- 13 (2013-07-26 (金) 01:21:01)
- 14 (2013-09-03 (火) 01:31:47)
- 15 (2013-09-13 (金) 00:19:12)
- 16 (2014-08-12 (火) 02:10:09)
- 17 (2014-11-06 (木) 01:01:30)
- 18 (2014-11-25 (火) 03:03:31)
- 19 (2014-11-26 (水) 02:31:15)
- 20 (2014-11-26 (水) 17:01:53)
- 21 (2016-01-03 (日) 05:56:05)
- 22 (2016-09-30 (金) 15:47:33)
- 23 (2017-11-02 (木) 15:34:40)
- 24 (2017-11-09 (木) 14:09:56)
- 25 (2018-02-24 (土) 19:51:30)
- 26 (2018-10-11 (木) 17:47:50)
- 27 (2018-10-12 (金) 20:12:42)
- 28 (2020-10-06 (火) 14:51:14)
- 29 (2022-07-08 (金) 11:05:33)
- 30 (2022-08-20 (土) 22:15:25)
TITLE:JListをマウスクリックのみで複数選択する #navi(../) RIGHT:Posted by [[terai]] at 2011-07-18 *JListをマウスクリックのみで複数選択する [#n2f0193f] JListをアイテムをマウスクリックだけで複数選択できるように設定します。 -&jnlp; -&jar; -&zip; //#screenshot #ref(https://lh6.googleusercontent.com/-wj2xm8BlBbA/TiPrjr1sQ5I/AAAAAAAAA_c/NiXO891B5fs/s800/ListMouseSelection.png) **サンプルコード [#ncc6d7b3] #code{{ JList list = new JList(model) { private ClearSelectionListener listener; @Override public void setSelectionInterval(int anchor, int lead) { if(anchor==lead && lead>=0 && anchor>=0) { if(listener.isDragging) { addSelectionInterval(anchor, anchor); }else if(!listener.isInCellDragging) { if(isSelectedIndex(anchor)) { removeSelectionInterval(anchor, anchor); }else{ addSelectionInterval(anchor, anchor); } listener.isInCellDragging = true; } }else{ super.setSelectionInterval(anchor, lead); } } }; }} **解説 [#cd959e47] - 左: Default - 中: MouseEvent -- JList#processMouseEvent, JList#processMouseMotionEventをオーバーライドして、常にCtrlキーが押されている状態にする -- マウスでアイテムをドラッグしても選択状態は変わらない -- JListの空白部分をクリックした場合、アイテムの選択状態は変更せず(MouseEvent#consume())、フォーカスだけJListに移動 -- 参考: [http://forums.oracle.com/forums/thread.jspa?messageID=5692411 Thread: JList where mouse click acts like ctrl-mouse click] #code{{ JList list = new JList(model) { @Override protected void processMouseMotionEvent(MouseEvent e) { super.processMouseMotionEvent(convertMouseEvent(e)); } @Override protected void processMouseEvent(MouseEvent e) { if(!getCellBounds(0, getModel().getSize()-1).contains(e.getPoint())) { e.consume(); requestFocusInWindow(); }else{ super.processMouseEvent(convertMouseEvent(e)); } } private MouseEvent convertMouseEvent(MouseEvent e) { //Thread: JList where mouse click acts like ctrl-mouse click //http://forums.oracle.com/forums/thread.jspa?messageID=5692411 return new MouseEvent( (Component) e.getSource(), e.getID(), e.getWhen(), e.getModifiers() | InputEvent.CTRL_MASK, e.getX(), e.getY(), e.getXOnScreen(), e.getYOnScreen(), e.getClickCount(), e.isPopupTrigger(), e.getButton()); } }; }} - 右: SelectionInterval -- JList#setSelectionIntervalをオーバーライドして、ひとつのアイテムのセルを選択した場合は、JList#addSelectionInterval、JList#removeSelectionIntervalを使用するように変更 -- マウスでアイテムをドラッグすると、選択状態になる -- ひとつのアイテムのセル内でのドラッグでは、選択状態を変更しない -- 参考: [http://forums.oracle.com/forums/message.jspa?messageID=5692413#5692413 Thread: JList where mouse click acts like ctrl-mouse click] -- JListの空白部分をクリックした場合、アイテムの選択状態をすべてクリア([[JListの選択を解除>Swing/ClearSelection]]) **参考リンク [#e59c2cca] - [http://forums.oracle.com/forums/thread.jspa?messageID=5692411 Thread: JList where mouse click acts like ctrl-mouse click] - [[JListの選択を解除>Swing/ClearSelection]] - [[JListのセルにJCheckBoxを使用する>Swing/CheckBoxCellList]] **コメント [#tdd44287] - OSX(snow leopard)では、MouseEventは複数選択が出来ません。キーボードを使っても(command+クリック)無理でした。 -- [[nsby]] &new{2011-07-20 (水) 13:15:30}; #comment