Swing/LoopComboBox のバックアップの現在との差分(No.2)
JComboBoxのItem選択をループ
編集者:Terai Atsuhiro~
作成日:2005-10-24
更新日:2023-12-24 (日) 15:31:02
概要
JComboBox
のItem
の選択が、上下のカーソルキーでループするように設定します。
概要
JComboBoxのItemの選択が、上下のカーソルキーでループするように設定します。Screenshot
Advertisement
サンプルコード
#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サンプルコード
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");
解説
-
default
- 例えば最後のアイテムが選択されている状態で下カーソルキーを入力しても選択状態は変化しない
-
loop
-
loopUp
: 先頭のアイテムが選択されている状態で上カーソルキーを入力すると末尾のアイテムを選択するAction
を作成 -
loopDown
: 末尾のアイテムが選択されている状態で下カーソルキーを入力すると先頭のアイテムを選択するAction
を作成 -
JComboBox
からActionMap
とInputMap
を取得しこれに上下カーソルキーに対応する新しいAction
を追加して選択のループを可能に設定
-