在我基于 swing 的 UI 中,我有一个 JMenuBar,其中包含一系列 JMenu 和 JMenuItem 对象。菜单项对象之一也恰好是 JCheckBoxMenuItem。
现在,虽然用户可以单击此 JCheckBoxMenuItem 来切换应用程序级别设置的状态,但用户(在我的应用程序中)还可以访问命令行 API 来更改应用程序设置。此命令行 API 的详细信息不相关。
我的问题是这样的:当用户通过命令行 API 并切换设置的状态(适用于我的应用程序的所有打开实例的静态属性/设置)时,我想更新“已检查/JCheckBoxMenuItem 上的“未选中”属性。为此,我可以:
- 存储对复选框菜单项的引用。
- 遍历 JMenu 容器层次结构以查找 checkboxmenuitem。
我不想使用方法 1,因为将来,如果我有更多这样的复选框菜单项,那么我将不得不保留对每个复选框的引用。
方法2看起来很麻烦,因为我需要这样做:
Component[] childComponents = menu.getComponents();
for(Component c:childComponents)
{
if(c.getName().equals("nameOfTheCheckBoxMenuItem"))
{
componentFound = c;
}
}
是否有更好/更有效的方法来在组件层次结构中查找组件?是否有更好的方法来解决这个问题(当我的应用程序中的属性值更改时更改 jcheckboxmenuitem 的状态),例如使用 PropertyChangeListener (尽管我的理解是这些仅适用于“bean”) .
最佳答案
1) 我建议使用CardLayout为 multi_JPanel 应用程序提供最好、最简单的解决方法
2)然后你就可以实现
-
ActionListener al = new ActionListener() { public void actionPerformed(ActionEvent ae) { if (myCheckBox.isSelected()) { // something } else { // something } } };
-
ItemListener itemListener = new ItemListener() { public void itemStateChanged(ItemEvent itemEvent) { if (Whatever) { // something } } };
关于java - 从容器中查找并检索组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9141959/