在运行时从类中调用方法

时间:2013-06-12 13:41:19

标签: java swing jtabbedpane strategy-pattern

我有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 个答案:

答案 0 :(得分: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和持久性内容并不是很容易维护,但这不是你问题的目的。