2013-06-12 3 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

Было бы намного проще, если бы вы создали «интерфейс XMLWriter» с методом 'writeToXML()', а затем пусть все ваши компоненты вкладки реализуют этот метод. Наконец, в вашем actionPerformed, итерации по всем компонентам вкладки, передайте их в 'XMLWriter' и вызовите' writeToXML() '. Но все это пахнет хорошим спагетти-кодом, где логика и пользовательский интерфейс смешиваются вместе, что в конечном итоге приводит к недостижимому коду. –

ответ

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

Смежные вопросы