我试图找到一种通过名称在JMenu中选择元素的方法。
基本上,我想做的是这样的:

public boolean setEnableByName(boolean enable, String itemName) {
   for (Component item :  myJMenu.getComponents()) {
      if (item.getName().equals(itemName)) {
          item.setEnabled(enable);
          return true;
      }
   }
   return false;
}


我尝试在myJMenu.getComponents()myJMenu.getMenuComponents()上进行迭代,但无济于事。我已经搜索了原因,这似乎是由于JMenu不能直接直接存储子菜单和项目所致,即它们并不是真正存在的。

SO上也有类似的问题,但是它可以追溯到2012年,并且秋千有很多变化。

我测试了一个包含2个JMenus和2个JMenuItems的JMenu。
我得到的结果是:


使用getComponents()时:
我从不输入foreach(也没有返回任何元素)
使用getMenuComponents()时:我得到了两个JMenu元素


注意:请注意,我不能使用this method,因为触发动作的元素可以在代码中的任何位置。

注意:从测试中,我发现,对于我的菜单,getComponentsCount返回0,getMenuComponentsCount返回4,就像getItemsCount一样。
我的问题来自以下事实:我在比较元素的name而不是text

最佳答案

我假设您正在寻找JMenuItems,并且还使用JMenu函数将它们添加到了add中。在这种情况下,您可以使用getItemCount()getItem(int pos)函数,如下所示:

public boolean setEnableByName(boolean enable, String itemName) {
   for (int i = 0 ; i <  myJMenu.getItemCount(); i++) {
      JMenuItem item = myJMenu.getItem(i);
      if (item.getName().equals(itemName)) {
          item.setEnabled(enable);
          return true;
      }
   }
   return false;
}

07-24 22:13