2013-06-20 39 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。