从JMenuBar获取JMenuItems

时间:2014-07-20 12:20:24

标签: java arrays swing

我试图从接收JFrame作为参数的类中检索JMenuBar中的JMenuItems。我做了一些阅读,我想我明白JMenuBar包含JMenu,但那些不直接包含JMenuItems,对吗?

到目前为止我所拥有的(显然,它不起作用!):

  

JFrame mainWindow;

     

[...]

     

Component [] menus = mainWindow.getJMenuBar()。getComponents();

那么我怎么能获得,最多说,我的JFrame的所有JMenuItems的数组?然后,我将逐个启用它们。

谢谢!

3 个答案:

答案 0 :(得分:3)

是的,您也可以获得JMenu和JMenuItem。

使用JMenuBar#getMenu()JMenu#getMenuComponent()方法获取所需的输出。

示例程序:

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 :(得分:1)

JMenu类具有its API将显示的方法,允许您轻松获取JMenuItems:getItemCount()getItem(int pos)。还有getMenuElements()

答案 2 :(得分:0)

非常感谢!事实证明这很有效,而且比预期更容易:)

          for (int i = 0; i < mainWindow.getJMenuBar().getMenuCount(); i++) {
                for (int j = 0; j < mainWindow.getJMenuBar().getMenu(i).getItemCount(); j ++) {
                    if (mainWindow.getJMenuBar().getMenu(i).getItem(j) != null) {
                        mainWindow.getJMenuBar().getMenu(i).getItem(j).setEnabled(true);
                    }
                }
            }