这可能是一个非常愚蠢的方式去做的事情,但假设我们有一个类的许多字段是组件,如何去添加它们在每个循环与反射?
这是我到目前为止所做的尝试(虽然显然注定要失败):
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();
}
}
每个字段都是而不是一个类,所以上面的操作将不起作用,但是我已经定义了它们是什么,并且它们应该在运行时存在。
我应该怎么做?
您尝试从字段名创建类,因此无法工作。
bits.getName()返回类似"myHelloWorldLabel"的东西,而不是javax.swing.JLabel.
您可以添加字段bits.get(this)
的值,也可以从类bits.getDeclaringClass().newInstance()
创建一个新对象。
我还将添加一个检查类是否扩展了JComponent.