Я хочу определить, когда выбор изменяется внутри JPopupMenu
. Не при нажатии на пункт меню, а при выборе пункта меню (в режиме охраны). Проще говоря, я хочу обнаружить это:
То, что должно работать, - это добавить ChangeListener
к SelectionModel
, нокажется, что он не реагирует на события выбора:
public class PopupSelection extends JFrame {
private static final long serialVersionUID = 363879723515243543L;
public PopupSelection() {
super("something");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new FlowLayout());
JLabel label = new JLabel("right click me");
JPopupMenu menu = new JPopupMenu();
menu.getSelectionModel().addChangeListener(System.out::println);
JMenuItem menuItem1 = new JMenuItem("Item1");
JMenuItem menuItem2 = new JMenuItem("Item2");
JMenuItem menuItem3 = new JMenuItem("Item3");
menu.add(menuItem1);
menu.add(menuItem2);
menu.add(menuItem3);
label.setComponentPopupMenu(menu);
getContentPane().add(label);
setSize(400, 400);
setLocationRelativeTo(null);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new PopupSelection().setVisible(true));
}
}
Второе, что я попробовал, это PropertyChangeListener
, но он также не работает (не обнаруживает это конкретное событие):
menu.addPropertyChangeListener(System.out::println);
Я знаю, что есть альтернатива добавить ChangeListener
к каждому JMenuItem
и каждый раз повторять все компоненты JPopupMenu
, чтобы найти, какой из них выбран, но это не решение, которое я хочуследовать, так как это добавит нежелательную сложность в мой код.
Итак, есть ли способ определить выделение?
В случае XY-проблемы моя конечная цель - увеличить / уменьшить эту полосу прокрутки правильно, когда пользователь изменяет выбор меню с помощью кнопок со стрелками: ↑ ↓