2013-06-20 47 views
0

这可能是一种非常愚蠢的方式,但是说我们有一个包含许多组件的类,那么如何将它们添加到每个具有反射的循环中呢?通过挥杆反射添加组件?

这是我到目前为止已经试过(虽然它显然是注定要失败的):

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(); 
      } 
     } 

每个字段是一类这样做上述将无法正常工作,但我已经定义了它们是什么,它们应该在运行时存在。

我应该怎样做呢?

+0

不这样做反射只返回声明的字段,但可以修改值或属性 – mKorbel

+0

@mKorbel确实告诉? – Pureferret

+0

每个字段都可以表示编译对象,你可以[在运行时简单地改变它们的值的任何属性](http://stackoverflow.com/questions/6629995/test-if-a-class-contains-an-instance它基于变量的名称),它是测试编译代码中有意或有意破解的正确方法 – mKorbel

回答

1

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

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

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

我还将添加一个检查,该类扩展JComponent。