TITLE:JComboBoxのItem選択をループ

JComboBoxのItem選択をループ

編集者:Terai Atsuhiro~

作成日:2005-10-24
更新日:2023-12-24 (日) 15:31:02
  • 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

概要

JComboBoxItemの選択が、上下のカーソルキーでループするように設定します。

概要

JComboBoxのItemの選択が、上下のカーソルキーでループするように設定します。

サンプルコード

#spanend
#spanadd
Action up = new AbstractAction() {
#spanend
  @Override public void actionPerformed(ActionEvent e) {
    JComboBox<?> c = (JComboBox<?>) e.getSource();
    int i = c.getSelectedIndex();
    c.setSelectedIndex(i == 0 ? c.getItemCount() - 1 : i - 1);
  }
#spanadd
};
#spanend
#spanadd
Action down = new AbstractAction() {
#spanend
  @Override public void actionPerformed(ActionEvent e) {
    JComboBox<?> c = (JComboBox<?>) e.getSource();
    int i = c.getSelectedIndex();
    c.setSelectedIndex(i == c.getItemCount() - 1 ? 0 : i + 1);
  }
#spanadd
};
#spanend
#spanadd
ActionMap am = combo.getActionMap();
#spanend
#spanadd
am.put("loopUp", up);
#spanend
#spanadd
am.put("loopDown", down);
#spanend
#spanadd
InputMap im = combo.getInputMap();
#spanend
#spanadd
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "loopUp");
#spanend
#spanadd
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "loopDown");
#spanend
#spanadd
View in GitHub: Java, Kotlin

#screenshot

解説

  • default
    • 例えば最後のアイテムが選択されている状態で下カーソルキーを入力しても選択状態は変化しない
  • loop
    • loopUp: 先頭のアイテムが選択されている状態で上カーソルキーを入力すると末尾のアイテムを選択するActionを作成
    • loopDown: 末尾のアイテムが選択されている状態で下カーソルキーを入力すると先頭のアイテムを選択するActionを作成
    • JComboBoxからActionMapInputMapを取得しこれに上下カーソルキーに対応する新しいActionを追加して選択のループを可能に設定

サンプルコード

#spanend
 Action up = new AbstractAction() {
   public void actionPerformed(ActionEvent e) {
     int index = combo.getSelectedIndex();
     combo.setSelectedIndex((index==0)?combo.getItemCount()-1:index-1);
   }
 };
 Action down = new AbstractAction() {
   public void actionPerformed(ActionEvent e) {
     int index = combo.getSelectedIndex();
     combo.setSelectedIndex((index==combo.getItemCount()-1)?0:index+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");
#spandel
  • &jnlp;
  • &jar;
  • &zip;

参考リンク

解説

上記のサンプルでは、下のコンボボックスのActionMapとInputMapを使って、上下キーに対応する新しいアクションを設定しています。

コメント

コメント