2014-01-14 37 views
0

我試圖練習我的MVC佈局。我正在努力的一個領域是在漫長的過程中保持我的觀點更新。Java MVC:保持我的視圖更新

我有一個程序,在我的網站上做一些刮。它將數據返回到基於Swing的GUI中的表格。它正在我的程序運行的那一刻工作,在運行結束時它終於更新了表。

在我的模型中,我將結果存儲在某種形式的集合中,可能是一個ArrayList。在長時間運行的過程中,它會不斷更新。我需要根據模型中的Arraylist結果中的信息更新視圖。

我不知道我可以用什麼方法來做到這一點。我正在想方設法在我的控制器中不斷檢查結果arraylist,而長進程正在運行並更新視圖。或者我應該有一些方法來檢查模型何時改變?

我真的不知道我需要什麼方向去實現這一點,我只是尋找一些指針。

這是我目前的控制器,如果你需要更多的東西,請讓我知道。

public class BrowseController { 
private BrowseModel m_model; 
private BrowseView m_view; 

public BrowseController(BrowseModel model, BrowseView view) { 
    m_model = model; 
    m_view = view; 

    view.addRunListener(new RunListener()); 
    view.addClearListener(new ClearListener()); 
} 

class RunListener implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 
     m_view.setStatus("running"); 
     HashSet<String> urls = m_view.getTargetUrls(); 

     for (String url : urls){ 
      m_model.processUrl(url); 

      m_view.setResult(m_model.getResults()); 
     } 

    } 
} 

class ClearListener implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 
     System.out.println("clear"); 
     m_view.reset(); 
     m_model.reset(); 
    } 
} 

}

回答

1

如果你想獲得通知,只要你更新列表,你可以使用一個ObservableCollection。只要你的列表被修改,它就會觸發一個事件。

另外我不確定您是否正確使用該模型。是m_model.processUrl(url);一個二傳手?如果不是,則應將該方法的邏輯移入控制器。該模型應該只用最少(或不用)邏輯來存儲數據。