我试图找到按名称在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年,并且swing有很多变化。
我使用包含2个JMenus和2个JMenuItems的JMenu进行了测试。 我得到的结果是:
getComponents()
时:
我永远不会进入foreach(也就是没有返回的元素)getMenuComponents()
时:我获得了两个JMenu元素注意:请注意,我无法使用this method,因为触发操作的元素可以在代码中的任何位置。
注意:从测试中我发现,对于我的菜单,getComponentsCount
返回0,getMenuComponentsCount
返回4,就像getItemsCount
一样。
我的问题来自于我正在比较我的元素的name
而不是text
。
答案 0 :(得分:2)
我假设您正在寻找JMenuItems
,并且您已使用add
功能将其添加到JMenu
。在这种情况下,您可以使用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;
}