Java 从JMenuBar获取JMenuItems

Java 从JMenuBar获取JMenuItems,java,arrays,swing,Java,Arrays,Swing,我试图从接收JFrame作为参数的类中检索JMenuBar中的JMenuItems。我读了一些书,我想我理解JMenuBar包含JMenu,但是那些并不直接包含JMenu项,对吗 这里是我到目前为止所做的(显然,它不起作用!): JFrame主窗口 [……] 组件[]菜单=mainWindow.getJMenuBar().getComponents() 那么,我怎样才能获得JFrame中所有JMenuItems的数组呢?然后,我将简单地逐个启用它们 谢谢 JMenu类有一些方法可以显示,这些方法

我试图从接收JFrame作为参数的类中检索JMenuBar中的JMenuItems。我读了一些书,我想我理解JMenuBar包含JMenu,但是那些并不直接包含JMenu项,对吗

这里是我到目前为止所做的(显然,它不起作用!):

JFrame主窗口

[……]

组件[]菜单=mainWindow.getJMenuBar().getComponents()

那么,我怎样才能获得JFrame中所有JMenuItems的数组呢?然后,我将简单地逐个启用它们


谢谢

JMenu类有一些方法可以显示,这些方法允许您轻松获取JMenuItems:
getItemCount()
getItem(intpos)
。还有
getMenuElements()

JMenu类有一些方法,可以让您轻松获取JMenuItems:
getItemCount()
getItem(int pos)
。还有
getMenuElements()

是的,您还可以获得JMenu和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());
        }
    }
}
JMenuBar menubar1=getJMenuBar();
对于(int i=0;i
是的,您也可以获得JMenu和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());
        }
    }
}
JMenuBar menubar1=getJMenuBar();
对于(int i=0;i
非常感谢!结果证明,这非常有效,比预期的更容易:)

for(int i=0;i

非常感谢!结果证明,这非常有效,比预期的更容易:)

for(int i=0;i

“那么,我怎样才能获得JFrame中所有JMenuItems的数组呢?我将在以后逐个启用它们。”使用
Action
对象并将它们存储在数组中。这个问题的表达方式有一种明显的“糟糕的设计”的味道……我明白你的意思,但是如果这些项目已经存储在JFrame中,那会有什么好处呢?“那么,我怎么才能获得,最多也就是说,我JFrame中所有jMenuItem的数组?我随后将逐个启用它们。”使用
Action
对象并将其存储在数组中。这个问题的措辞有一种明显的“糟糕的设计”的味道……我明白你的意思,但是如果这些项目已经存储在JFrame中,那会有什么好处呢?如果菜单有其他子菜单,而这些子菜单有其他子菜单呢?您需要执行一些递归调用来处理这个问题。您所拥有的可能适用于简单的情况,但请记住;-)如果菜单有其他子菜单,而这些子菜单有其他子菜单,该怎么办?您需要执行一些递归调用来处理这个问题。您所拥有的可能适用于简单的情况,但请记住;-)