繁体   English   中英

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

[英]how to get the name of a JMenu when a JMenuItem is clicked

如何获得持有被单击的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)

由于这是一个MenuEvent ,因此getSource()方法将返回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();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM