Я хотел бы получить имя JMenu, когда я нажимаю на свой JMenuItem с помощью JPopupMenu.Получить JMenu от JMenuItem с JPopupMenu
Я поставил ActionListener под названием "menuContextuelListener" на каждом JMenuItem:
ActionListener menuContextuelListener = new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println(event.getActionCommand());
}
};
Как я могу получить имя родителя JMenu из JMenuItem выбранного?
Я также попробовал этот способ в том же слушателем, но он не работает:
JMenuItem jmi = (JMenuItem) event.getSource();
JPopupMenu jpm = (JPopupMenu) jmi.getParent();
JMenu menu = (JMenu) jpm.getInvoker();
И это один из how to get the name of a JMenu when a JMenuItem is clicked:
JPopupMenu menu = (JPopupMenu) ((JMenuItem) evt.getSource()).getParent();
JMenu actMenu = menu.getInvoker();
Полный код слушателя:
ActionListener menuContextuelListener = new ActionListener(){
public void actionPerformed(ActionEvent event)
{
JMenuItem source = (JMenuItem)(event.getSource());
try{
JMenuItem menuItem = (JMenuItem) event.getSource();
JPopupMenu popupMenu = (JPopupMenu) menuItem.getParent();
Component invoker = popupMenu.getInvoker();
JPopupMenu popup = (JPopupMenu) invoker.getParent();
System.out.println("NAME OF JMENU: "+popup.getName());
}catch(Exception ex){
ex.printStackTrace();
}
}
};
Здесь приведен пример построения меню (динамически):
tJMenu.add(new JMenu(ligne.substring(0, pos-1)));
tJMenu.get(tJMenu.size()-1).setName(ligne.substring(0, pos-1));
и проверить на код ниже ... и я могу видеть имена JMenu:
System.out.println(tJMenu.get(tJMenu.size()-1).getName());
Да, но он возвращает «НАЗВАНИЕ JMENU: null». – Fred
Какая часть вашего кода печатает это? – Berger
Привет Бергер, пожалуйста, найдите код в ответе ниже. Thnak вам за вашу поддержку. – Fred