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

3

我需要在一个JMenu中找到特定的JMenuItem的索引,以便我可以编程地在其前面insert()一个新的JMenuItem。我该如何做呢?


你尝试过使用 Container#getComponentZOrder(Component) 吗? - MadProgrammer
@MadProgrammer,我猜你忘记添加链接了,这是它的链接:Container#getComponentZOrder(Component) - Frakcool
@MadProgrammer 谢谢 - Aviv Cohn
1
@Frakcool 不,我在iPad上做这件事很痛苦... :P - MadProgrammer
@MadProgrammer 如果你想的话可以把它变成一个答案 :) 顺便问一下:人们为什么要写 Class#method 而不是 Class.method?这是某种约定吗? - Aviv Cohn
我使用Class#method表示实例方法,而Class.method表示静态方法。 - MadProgrammer
3个回答

2

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();
    }
}

0
在JMenuItem的动作监听器中,获取源并执行类似以下操作...
for(int i = 0; i < jmenu.getMenuComponents().length; i++){
     if(jMenu.getMenuComponent(i) == jMenuItem ){
              // so that i is index here...
     }
}

这里 jMenuItem 是 e.getSource()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接