Java 在swing中通过反射添加组件?

Java 在swing中通过反射添加组件?,java,swing,reflection,Java,Swing,Reflection,这可能是一种非常愚蠢的方式,但是假设我们有一个类,其中有很多字段是组件,那么如何在带有反射的for-each循环中添加它们呢 以下是我迄今为止所做的尝试(尽管它显然注定要失败): 每个字段都不是一个类,因此执行上述操作将不起作用,但我已经定义了它们是什么,它们应该在运行时存在 我应该怎么做呢?您试图从字段名创建一个类,所以它不起作用 getName()返回类似“myHelloWorldLabel”的内容,而不是javax.swing.JLabel 您可以添加字段bits.get(this)的值,

这可能是一种非常愚蠢的方式,但是假设我们有一个类,其中有很多字段是组件,那么如何在带有反射的for-each循环中添加它们呢

以下是我迄今为止所做的尝试(尽管它显然注定要失败):

每个字段都不是一个类,因此执行上述操作将不起作用,但我已经定义了它们是什么,它们应该在运行时存在


我应该怎么做呢?

您试图从字段名创建一个类,所以它不起作用

getName()返回类似“myHelloWorldLabel”的内容,而不是javax.swing.JLabel

您可以添加字段
bits.get(this)
的值,或者从类
bits.getDeclaringClass().newInstance()创建一个新对象


我还想添加一个检查,确保类扩展了JComponent。

不要这样做,反射只返回声明的字段,但可以修改字段的值或属性每个字段都可以表示编译对象,您可以这样做,它是在编译代码中测试purposer或蓄意黑客行为的正确方法
for(Field bits: this.getClass().getDeclaredFields()){
            try {
                this.add((Component)Class.forName(bits.getName()).newInstance());
            } catch (InstantiationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }