在其 JMenuItems 上迭代 JMenu
Iterate a JMenu on its JMenuItems
我正在尝试寻找通过名称在 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
。
我假设您正在寻找 JMenuItems
并且您使用 add
function. In that case you could use the getItemCount()
and getItem(int pos)
函数将它们添加到您的 JMenu
中,如下所示:
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;
}
我正在尝试寻找通过名称在 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
。
我假设您正在寻找 JMenuItems
并且您使用 add
function. In that case you could use the getItemCount()
and getItem(int pos)
函数将它们添加到您的 JMenu
中,如下所示:
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;
}