java - 通过名称获取 Swing 组件

标签 java swing jframe

我在 JFrame 中有一些我想要的组件 引用另一个 JFrame 我想要 按名字获取它们而不是 为每个方法执行公共(public)获取/设置方法。

有没有办法从 Swing 中通过名称获取组件引用,就像这样做 c#?

例如form.Controls["text"]

谢谢

最佳答案

我知道这是一个老问题,但我发现自己现在才问它。我想要一种简单的方法来按名称获取组件,这样我就不必每次都编写一些复杂的代码来访问不同的组件。例如,让 JButton 访问文本字段中的文本或列表中的选择。

最简单的解决方案是使所有组件变量成为类变量,以便您可以在任何地方访问它们。然而,并不是每个人都想这样做,有些人(比如我自己)使用的 GUI 编辑器不会将组件生成为类变量。

据我所知,我的解决方案很简单,我想,并且并没有真正违反任何编程标准(引用 fortran 的内容)。它允许通过名称简单直接地访问组件。

  1. 创建一个 Map 类变量。您需要在以下位置导入 HashMap 非常少。为了简单起见,我将我的组件命名为 componentMap。

    private HashMap componentMap;
    
  2. 照常将所有组件添加到框架中。

    initialize() {
        //add your components and be sure
        //to name them.
        ...
        //after adding all the components,
        //call this method we're about to create.
        createComponentMap();
    }
    
  3. 在您的类中定义以下两个方法。如果您还没有导入组件,则需要导入组件:

    private void createComponentMap() {
            componentMap = new HashMap<String,Component>();
            Component[] components = yourForm.getContentPane().getComponents();
            for (int i=0; i < components.length; i++) {
                    componentMap.put(components[i].getName(), components[i]);
            }
    }
    
    public Component getComponentByName(String name) {
            if (componentMap.containsKey(name)) {
                    return (Component) componentMap.get(name);
            }
            else return null;
    }
    
  4. 现在您已经有了一个 HashMap,它将框架/内容 Pane /面板/等中当前存在的所有组件映射到它们各自的名称。

  5. 现在要访问这些组件,只需调用 getComponentByName(String name) 即可。如果存在具有该名称的组件,它将返回该组件。如果不是,则返回 null。您有责任将组件转换为正确的类型。我建议使用instanceof来确定。

如果您计划在运行时的任何时候添加、删除或重命名组件,我会考虑添加根据您的更改修改 HashMap 的方法。

关于java - 通过名称获取 Swing 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39970474/

相关文章:

java - 无法确定 tag<shape 的类型

Java 网格布局和 JPanel

java - 单击JButton时如何打开新的JFrame?

java - 如何创建完全自定义的 JavaFX 控件?或者: how to create Pane with dynamically drawn background?

java - JLabel 之上的 JButton

java - Java 中字符串的传统西类牙语排序

java - 如何在JFrame的边框上绘图

java - Swing & batik : Create an ImageIcon from an SVG file?

java - JToolBar - JButton - 图像未显示

java - 无法更改 JFrame ContentPane 的背景颜色