У меня есть новый пользовательский интерфейс, над которым я работаю над реализацией в Java, и у меня возникают проблемы с реализацией JPopupMenu, содержащего JMenu (а также несколько JMenuItems), который сам содержит несколько JMenuItems. JPopupMenu появляется там, где я нажимаю на RMB, и выглядит хорошо, но у «Connect» у JMenu, кажется, нет детей, когда я нахожу курсор мыши, несмотря на все мои усилия по .add ().
Посмотрев несколько примеров в Интернете, я не увидел ни одного, который бы специально реализовывал прослушиватель для mouseEntered () для развертывания подэлементов. Я думаю, что я что-то напутал в моем методе инициализации меню.
Я приложил соответствующий код для вашего прочтения.
//Elsewhere...
private JPopupMenu _clickMenu;
//End Elsehwere...
private void initializeMenu()
{
_clickMenu = new JPopupMenu();
_clickMenu.setVisible(false);
_clickMenu.add(generateConnectionMenu());
JMenuItem menuItem;
menuItem = new JMenuItem("Configure");
addMenuItemListeners(menuItem);
_clickMenu.add(menuItem);
menuItem = new JMenuItem("Status");
addMenuItemListeners(menuItem);
_clickMenu.add(menuItem);
}
private JMenu generateConnectionMenu()
{
JMenu menu = new JMenu("Connect");
List<Port> portList = _database.getAllPortsInCard(_cardId);
for(int i = 0; i < portList.size(); i++)
{
menu.add(new JMenuItem(portList.get(i).getName()));
}
return menu;
}
Код, конечно, не самый красивый, но будьте осторожны со мной, потому что сегодня он менялся слишком много раз, если позволяло время, когда я пытался понять, почему это не работает. Я думаю, что это может быть вопросом области видимости, но я пробовал несколько разных конфигураций кода, но безрезультатно. Не стесняйтесь задавать любые дополнительные вопросы или шлепать меня за очевидный недосмотр (это случилось раньше ...). Спасибо всем!
Изменить:
Обсудите это с отсутствием опыта работы с Java и Swing ... Я вручную позиционировал и делал JPopupMenu
видимым вместо использования JComponent.setComponentPopupMenu(menu)
метода. После этого для модуля карты на изображении выше (сам JButton), подменю отображается правильно. Другая функциональная версия кода инициализации приведена ниже.
private void initializeMenu()
{
_cardMenu = new JPopupMenu();
JMenu menu = new JMenu("Connect");
JMenuItem menuItem;
menuItem = new JMenuItem("1");
menu.add(menuItem);
menuItem = new JMenuItem("2");
menu.add(menuItem);
_cardMenu.add(menu);
_cardMenu.add(new JMenuItem("Configure"));
_cardMenu.add(new JMenuItem("Status"));
_mainButton.setComponentPopupMenu(_cardMenu); //Important, apparently!
}
Итак, урок усвоен. Спасибо за помощь, ребята!