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

Advertisement
サンプルコード
Action up = new AbstractAction() {
@Override public void actionPerformed(ActionEvent e) {
int index = combo.getSelectedIndex();
combo.setSelectedIndex((index == 0) ? combo.getItemCount() - 1 : index - 1);
}
};
Action down = new AbstractAction() {
@Override 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");
View in GitHub: Java, Kotlin解説
default
- 例えば最後のアイテムが選択されている状態で下カーソルキーを入力しても選択状態は変化しない
loop
myUp
: 先頭のアイテムが選択されている状態で上カーソルキーを入力すると末尾のアイテムを選択するAction
を作成myDown
: 末尾のアイテムが選択されている状態で下カーソルキーを入力すると先頭のアイテムを選択するAction
を作成JComboBox
からActionMap
とInputMap
を取得しこれに上下カーソルキーに対応する新しいAction
を追加して選択のループを可能に設定