1

如何获得持有点击的 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,或者其他方式来确定名称?谢谢。

4

3 回答 3

3

我建议您添加一个MenuListener并将JMenu您的代码添加到public void menuSelected(javax.swing.event.MenuEvent evt).

由于这是 a MenuEvent,该getSource()方法将返回JMenu对象

如果您想从您的 中获取它,请ActionEvent尝试以下操作:

JPopupMenu menu = (JPopupMenu) ((JMenuItem) evt.getSource()).getParent();
JMenu actMenu = menu.getInvoker();
于 2012-08-16T02:14:28.250 回答
2

无需转换为 JMenu,只需转换为 JMenuItem。然后从中获取 JMenu。

JMenuItem jmi = (JMenuItem) arg0.getSource();
JPopupMenu jpm = (JPopupMenu) jmi.getParent();
JMenu menu = (JMenu) jpm.getInvoker();
于 2012-08-16T02:32:21.667 回答
0

假设 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();
    }
}
于 2015-04-15T03:30:44.937 回答