java - 从容器中查找并检索组件

标签 java swing jcomponent

在我基于 swing 的 UI 中,我有一个 JMenuBar,其中包含一系列 JMenu 和 JMenuItem 对象。菜单项对象之一也恰好是 JCheckBoxMenuItem。

现在,虽然用户可以单击此 JCheckBoxMenuItem 来切换应用程序级别设置的状态,但用户(在我的应用程序中)还可以访问命令行 API 来更改应用程序设置。此命令行 API 的详细信息不相关。

我的问题是这样的:当用户通过命令行 API 并切换设置的状态(适用于我的应用程序的所有打开实例的静态属性/设置)时,我想更新“已检查/JCheckBoxMenuItem 上的“未选中”属性。为此,我可以:

  1. 存储对复选框菜单项的引用。
  2. 遍历 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)然后你就可以实现

  • 添加Action/ActionListener

           ActionListener al = new ActionListener() {
    
                public void actionPerformed(ActionEvent ae) {
                    if (myCheckBox.isSelected()) {
                        // something
                    } else {
                        // something
                    }
                }
            };
    
  • 添加ItemListener

    ItemListener itemListener = new ItemListener() {
    
        public void itemStateChanged(ItemEvent itemEvent) {
            if (Whatever) {
                // something
            }
        }
    };
    

关于java - 从容器中查找并检索组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9141959/

相关文章:

java - 如何从菜单项actionPerformed 打开JFileChooser?

java - 更改 JComboBox 的字符串数组

java - Scala、SQL Server - 如何使用 Scala 将当前时间戳作为日期时间插入 SQL Server 中?

java - Java 中 ArrayList remove() 的不良行为

java - SQL语句语法错误

java - 在 Swing 事件处理程序中呈现无闪烁的 JComponent

java - 使用 ArrayList 绘图时遇到问题

java - 使用 Java Swing 的可滚动垂直文本框输入列表

java - 当背景颜色 alpha 值设置为小于 255 (200) 时,JButton、JLabel、JTextArea 会抖动

java - 向所有客户端发送消息时出现 ConcurrentModificationException