2013-06-12 71 views
1

我有一個JTabbedPane像在這樣的畫面:調用從一個類的方法在運行時

My Tabbed Pane http://oi43.tinypic.com/2mm7ifk.jpg

我有一個類爲每個標籤(HouseGUI,CSPGUI,VPPGUI,以及許多其他的)。 每一類有一個叫做writeToXML()

我需要調用每一個「類」的writeToXML()方法在我JTabbedPane當我按下「全部保存」按鈕的方法。但我真的不知道該怎麼做。你可以幫我嗎?

這是我到目前爲止已經完成:

if (e.getSource() == saveAllButton) { 
     int totalTabs = tabbedPane.getTabCount(); 
     ArrayList<ArrayList<String>> salvationForAll = new ArrayList<>(); 
     ArrayList<Method> methods = new ArrayList<>(); 
     Method[] array = new Method[50]; 
     for (int i = 0; i < totalTabs; i++) { 
      try { 
       String title = tabbedPane.getTitleAt(i); 
       String tmp = title; 
       tmp = tmp.replaceAll("\\s", ""); 
       array = Class.forName("tabbedpaneInterfaces."+ tmp +"GUI").getMethods(); 
      } catch (ClassNotFoundException ex) { 
       Logger.getLogger(AddComponents.class.getName()).log(Level.SEVERE, null, ex); 
      } 

      methods = convertToArrayList(array); 
      int methodSize = methods.size(); 
      for (int j = 0; j < methodSize; j++) { 
       //TO DO call WriteToXML()      
      }     
     }    
    } 

我怎麼能叫我需要的方法,在運行時?

+1

如果使用'writeToXML()'方法創建'interface XMLWriter',那麼讓所有選項卡組件實現該方法會簡單多了。最後,在actionPerformed中,遍歷所有選項卡組件,將它們轉換爲'XMLWriter'並調用'writeToXML()'。但是,所有這些聞起來都像是一個很好的意大利麪代碼,其中邏輯和UI混合在一起,最終導致不可維護的代碼。 –

回答

3

讓你* UI類實現相同的接口:

public interface XMLWritable { 
    void writeToXml(); 
} 

public class HouseGUI implements XMLWritable { 
    public void writeToXml() { 
    //XML writing stuff 
    } 

} 

---- 
for (int i = 0; i < totalTabs; i++) { 
if(tabbedPane.getComponentAt(i) instanceof XMLWritable) { 
    ((XMLWritable) tabbedPane.getComponentAt(i)).writeToXml(); 
} 
} 

總之,它是不是很維護混合UI和持久性的東西,但它不是你的問題的目的。

+0

我有一個writeToXML方法的接口,我忘了提及它。非常感謝 :) – SaintLike

相關問題