单击JMenuItem时如何获取JMenu的名称

如何获得持有点击的JMenuItem的JMenu的名称? 我试过这样做:

public void actionPerformed(ActionEvent arg0) { JMenu menuthing = (JMenu)(arg0.getSource()); String menuString = menuthing.getText(); JMenuItem source = (JMenuItem)(arg0.getSource()); String colorType = source.getText(); 

但它给了我这个错误:

 Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JMenuItem cannot be cast to javax.swing.JMenu 

那么有没有办法转换为JMenu,或其他一些方法来确定名称? 谢谢。

我建议在你的JMenu添加一个MenuListener ,并在public void menuSelected(javax.swing.event.MenuEvent evt)添加你的代码。

由于这是一个MenuEventgetSource()方法将返回JMenu对象

如果你想从你的ActionEvent获取它,请尝试这样的事情:

 JPopupMenu menu = (JPopupMenu) ((JMenuItem) evt.getSource()).getParent(); JMenu actMenu = menu.getInvoker(); 

而不是强制转换为JMenu只是强制转换为JMenuItem。 然后从中获取JMenu。

 JMenuItem jmi = (JMenuItem) arg0.getSource(); JPopupMenu jpm = (JPopupMenu) jmi.getParent(); JMenu menu = (JMenu) jpm.getInvoker(); 

假设JMenuItems是JMenu的子代,您仍可以使用ActionEvent执行此操作:

 JPopupMenupopup = new JPopupMenu(); popup.setName("popup"); 

….

 @Override public void actionPerformed(ActionEvent e) { JMenuItem source = (JMenuItem)(e.getSource()); try{ JMenuItem menuItem = (JMenuItem) e.getSource(); JPopupMenu popupMenu = (JPopupMenu) menuItem.getParent(); Component invoker = popupMenu.getInvoker(); JPopupMenu popup = (JPopupMenu) invoker.getParent(); System.out.println("NAME OF JMENU: "+popup.getName()); //If you need the selection of cell(s) JTable table = (JTable)popup.getInvoker(); int row = table.getSelectedRow(); int col = table.getSelectedColumn(); System.out.println("Selected cell: "+row+"-"+col); }catch(Exception ex){ ex.printStackTrace(); } }