【发布时间】:2017-04-30 03:16:33
【问题描述】:
我正在尝试找到按名称在 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 个 JMenu 和 2 个 JMenuItem 的 JMenu 进行了测试。 我得到的结果:
- 使用
getComponents()时: 我从不进入 foreach(也就是没有返回任何元素) - 使用
getMenuComponents()时:我得到了两个 JMenu 元素
注意:请注意,我不能使用this method,因为触发动作的元素可以在代码中的任何位置。
注意:通过测试,我发现对于我的菜单,getComponentsCount 返回 0,getMenuComponentsCount 返回 4,就像 getItemsCount。
我的问题来自于我正在比较元素的 name 而不是 text。
【问题讨论】:
-
您是否将
JMenuItems 添加到您的JMenu中?你能显示那个代码吗? -
get / putClientProperty 帮你,是/可以是唯一的,可设置的,这个值(对我没有任何意义)可以在运行时改变
标签: java swing jmenu jmenuitem