我有一个JTabbedPane类似于此图片中的一个:

java - 在运行时从类调用方法-LMLPHP


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


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

最佳答案

让所有* 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和持久性混合在一起并不是很容易维护,但这不是您提出问题的目的。

10-07 19:30
查看更多