当前位置: 首页 > 知识库问答 >
问题:

从其父JMenu获取JMenuItem的位置

柯捷
2023-03-14

是否可以获取JMenuItem在其JMenu中的位置/索引?

例如,我有一个名为“Search”的JMenu和3个名为“Find”、“Count”和“Replace”的JMenuItems,我只有1个类管理器来管理所有3个JMenuItems。因此,我使用getSource()方法来获取单击了哪些JMenuItems,以便将JMenuItem的索引传递给另一个类的构造函数。

我的问题是,如果想添加更多JMenuItems或更改JMenuItems的顺序,我必须更改传递给另一个类的构造函数的索引。

非常感谢。

共有2个答案

米修平
2023-03-14

创建示例嵌套上下文菜单

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

从JMenu获取JMenuItem的位置/索引

@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();
    }
}
邬宜然
2023-03-14

使用JMenuBar#getMenu()和JMenu#getMenuComponent()方法获取所有JMenu和JMenuItem。

只需迭代任何JMenu的所有JMenuItem,并获得所需JMenuItem的索引。

示例程序:

JMenuBar menubar1 = getJMenuBar();
for (int i = 0; i < menubar1.getMenuCount(); i++) {
    JMenu menu1 = menubar1.getMenu(i);
    System.out.println("Menu:" + menu1.getText());
    for (int j = 0; j < menu1.getMenuComponentCount(); j++) {
        java.awt.Component comp = menu1.getMenuComponent(j);
        if (comp instanceof JMenuItem) {
            JMenuItem menuItem1 = (JMenuItem) comp;
            System.out.println("MenuItem:" + menuItem1.getText());
        }
    }
}
 类似资料:
  • 主要内容:1 Java JMenuBar JMenu JMenuItem的介绍,2 Java JMenuBar JMenu JMenuItem的声明,3 Java JMenuBar JMenu JMenuItem的案例1,4 Java JMenuBar JMenu JMenuItem的案例21 Java JMenuBar JMenu JMenuItem的介绍 JMenuBar类用于在窗口或框架上显示菜单栏。它可能有几个菜单。 JMenu类的对象是从菜单栏显示的下拉菜单组件。它继承了JMenuIt

  • 目前使用SWING实现一个JMenuBar,其中有两个不同的JMenu。一个叫做gameMenu,另一个叫做addMenuGame。 我在游戏菜单中有几个JMenuItems,都是用这个方法在我的界面控制器中实现的。 它所做的是从文本文件中读取每一行,并将其添加到JMenu,称为gameMenu。但是,我只能将actionlisteners添加到JMenu,而不能添加JMenuItem,即JMen

  • 问题内容: 这段代码是在b.py中获取templates / blog1 / page.html: 但我想获取父目录位置: 以及如何获得父位置 谢谢 更新: 这是正确的: 要么 问题答案: 您可以重复应用dirname来爬高:。但是,这只能到达根包。如果有问题,请使用:。

  • 问题内容: 现在,我有一个JMenu和其中的一些JMenuItems。我希望程序在JMenu和JMenuItem的状态更改为“已选择”时执行一些操作。我不使用MouseLitener的MouseOver,因为我希望用户也能够使用键盘在菜单中导航。现在,我写了这个监听器: 当我将此侦听器添加到JMenu时,它可以正常工作,但是当我将其添加到JMenuItem时,什么也没有发生…当我删除if语句以使侦

  • 我在我的项目中添加了一个jDialog Swing表单,如图所示: 现在我想从jtextField获取到父JFrame的值,当我关闭这个JDialog时,我搜索了一下它,发现: 但是编译器告诉我在我的JDialog中没有名为

  • 介绍 (Introduction) Menu类表示从菜单栏部署的下拉菜单组件。 Class 声明 (Class Declaration) 以下是javax.swing.JMenu类的声明 - public class JMenu extends JMenuItem implements Accessible, MenuElement 字段 (Field) 以下是java.awt