1

我有一个JTabbedPane像这张照片中的那个:

我的选项卡式窗格

我为每个选项卡(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()                       
            }                   
        }               
    }

如何在运行时调用我需要的方法?

4

1 回答 1

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 和持久性的东西不是很容易维护,但这不是你问题的目的。

于 2013-06-12T13:47:52.310 回答