Swing/LoopComboBox のバックアップの現在との差分(No.6)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/LoopComboBox へ行く。
- 1 (2005-11-13 (日) 11:00:49)
- 2 (2005-11-13 (日) 19:03:50)
- 3 (2006-02-27 (月) 16:10:45)
- 4 (2006-05-26 (金) 14:14:16)
- 5 (2007-07-19 (木) 10:53:57)
- 6 (2013-03-22 (金) 11:46:50)
- 7 (2013-10-10 (木) 11:42:42)
- 8 (2015-03-13 (金) 13:07:06)
- 9 (2016-09-21 (水) 01:21:18)
- 10 (2017-10-28 (土) 18:50:28)
- 11 (2017-10-30 (月) 18:42:51)
- 12 (2019-04-19 (金) 14:14:08)
- 13 (2021-01-30 (土) 00:52:19)
- 14 (2023-12-24 (日) 15:31:02)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JComboBoxのItem選択をループ #navi(../) #tags() RIGHT:Posted by &author(aterai); at 2005-10-24 *JComboBoxのItem選択をループ [#t1a92582] JComboBoxのItemの選択が、上下のカーソルキーでループするように設定します。 --- category: swing folder: LoopComboBox title: JComboBoxのItem選択をループ tags: [JComboBox, ActionMap, InputMap] author: aterai pubdate: 2005-10-24T09:40:47+09:00 description: JComboBoxのItemの選択が、上下のカーソルキーでループするように設定します。 image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTPicRK7pI/AAAAAAAAAeI/ApRsPHlRWe0/s800/LoopComboBox.png --- * 概要 [#summary] `JComboBox`の`Item`の選択が、上下のカーソルキーでループするように設定します。 -&jnlp; -&jar; -&zip; #download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTPicRK7pI/AAAAAAAAAeI/ApRsPHlRWe0/s800/LoopComboBox.png) //#screenshot #ref(http://lh4.ggpht.com/_9Z4BYR88imo/TQTPicRK7pI/AAAAAAAAAeI/ApRsPHlRWe0/s800/LoopComboBox.png) **サンプルコード [#b3f4d4b8] * サンプルコード [#sourcecode] #code(link){{ Action up = new AbstractAction() { public void actionPerformed(ActionEvent e) { int index = combo.getSelectedIndex(); combo.setSelectedIndex((index==0)?combo.getItemCount()-1:index-1); @Override public void actionPerformed(ActionEvent e) { JComboBox<?> c = (JComboBox<?>) e.getSource(); int i = c.getSelectedIndex(); c.setSelectedIndex(i == 0 ? c.getItemCount() - 1 : i - 1); } }; Action down = new AbstractAction() { public void actionPerformed(ActionEvent e) { int index = combo.getSelectedIndex(); combo.setSelectedIndex((index==combo.getItemCount()-1)?0:index+1); @Override public void actionPerformed(ActionEvent e) { JComboBox<?> c = (JComboBox<?>) e.getSource(); int i = c.getSelectedIndex(); c.setSelectedIndex(i == c.getItemCount() - 1 ? 0 : i + 1); } }; ActionMap amc = combo.getActionMap(); amc.put("myUp", up); amc.put("myDown", down); InputMap imc = combo.getInputMap(); imc.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "myUp"); imc.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "myDown"); ActionMap am = combo.getActionMap(); am.put("loopUp", up); am.put("loopDown", down); InputMap im = combo.getInputMap(); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "loopUp"); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "loopDown"); }} **解説 [#d842f217] 上記のサンプルでは、下のコンボボックスのActionMapとInputMapを使って、上下キーに対応する新しいアクションを設定しています。 * 解説 [#explanation] - `default` -- 例えば最後のアイテムが選択されている状態で下カーソルキーを入力しても選択状態は変化しない - `loop` -- `loopUp`: 先頭のアイテムが選択されている状態で上カーソルキーを入力すると末尾のアイテムを選択する`Action`を作成 -- `loopDown`: 末尾のアイテムが選択されている状態で下カーソルキーを入力すると先頭のアイテムを選択する`Action`を作成 -- `JComboBox`から`ActionMap`と`InputMap`を取得しこれに上下カーソルキーに対応する新しい`Action`を追加して選択のループを可能に設定 //**参考リンク **コメント [#fd90efef] * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/ActionMap.html ActionMap (Java Platform SE 8)] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/InputMap.html InputMap (Java Platform SE 8)] * コメント [#comment] #comment #comment