如何在JMenu中获取JMenuItem的索引?

时间:2014-09-15 21:13:26

标签: java swing jmenu jmenuitem

我需要在JMenuItem中找到特定JMenu的索引,以便我可以在其之前编程insert()新的JMenuItem。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

使用Container#getComponentZOrder(Component),它应该返回容器中组件的索引位置

答案 1 :(得分:1)

以下是与上述建议相同的解决方案的代码示例:

JPopupMenu popup = new JPopupMenu();
popup.setName("popup");
JMenu jMenu= new JMenu("menu");
jMenu.setName("menu");
JMenuItem menuItem1 = new JMenuItem("sub1");
jMenu.add(menuItem1);
menuItem1.addActionListener(this);
popup.add(jMenu);

...

@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();  
        // Print MenuItem index against the total number of items
        System.out.println(popupMenu.getComponentZOrder(menuItem)+"/"+popupMenu.getComponentCount());
    }catch(Exception ex){
        ex.printStackTrace();
    }
}

答案 2 :(得分:0)

在JMenuItem动作侦听器中,获取源并执行类似的操作..

for(int i = 0; i < jmenu.getMenuComponents().length; i++){
     if(jMenu.getMenuComponent(i) == jMenuItem ){
              // so that i is index here...
     }
}

此处jMenuItem is e.getSource()