【问题标题】:Get JMenuItems from JMenuBar从 JMenuBar 获取 JMenuItems
【发布时间】:2014-07-20 12:20:23
【问题描述】:

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

这是我目前所拥有的(显然,它不起作用!):

JFrame主窗口;

[...]

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

那么我怎样才能获得,最好说,我的 JFrame 的所有 JMenuItems 的数组?然后,我将在之后简单地启用它们。

谢谢!

【问题讨论】:

  • “那么我怎样才能获得,最好的说法是,我的 JFrame 的所有 JMenuItem 的数组?然后我将简单地一个一个地启用它们。” 使用Action 对象并将它们存储在一个数组中。这个问题的措辞方式有一种“糟糕的设计”的明显气味..
  • 我明白你的意思,但是如果这些项目已经存储在 JFrame 中会更好吗?

标签: java arrays swing


【解决方案1】:

是的,您也可以获得 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());
        }
    }
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      非常感谢!结果证明效果很好,而且比预期的要容易:)

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

      【讨论】:

      • 如果菜单有其他子菜单并且这些子菜单有其他子菜单怎么办?你需要做一些递归调用来处理它。您所拥有的可能适用于简单的情况,但请记住一些事情;-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多