我试图找到一种通过名称在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;
}