Во всплывающем окне со списком для отображения элементов используется компонент JList.
Вы можете получить доступ и изменить ориентацию JList для обертывания элементов:
Object child = comboBox.getAccessibleContext().getAccessibleChild(0);
BasicComboPopup popup = (BasicComboPopup)child;
JList list = popup.getList();
list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
list.setVisibleRowCount(3);
Это позволит навигация по элементам с помощью клавиш вверх / вниз.
Для поддержки навигации с помощью клавиш влево / вправо необходимо добавить дополнительные связывания клавиш в поле со списком:
InputMap im = comboBox.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
im.put(KeyStroke.getKeyStroke("LEFT"), "selectPrevious");
im.put(KeyStroke.getKeyStroke("RIGHT"), "selectNext");
Однако всплывающее окно основано на ширине самого большого элемента, добавляемого в поле со списком. Это будет проблемой, так как вы не увидите все элементы. Элементы будут прокручиваться при использовании клавиш для навигации, но вы не увидите все 9 элементов одновременно.
Чтобы решить эту проблему, воспользуйтесь Всплывающее окно со списком . Он имеет функции, которые позволяют вам контролировать размер / поведение всплывающего окна. Вы бы использовали:
BoundsPopupMenuListener listener = new BoundsPopupMenuListener(true, false);
comboBox.addPopupMenuListener( listener );