Java MVC:保持我的视图更新

时间:2014-01-14 12:47:38

标签: java swing user-interface model-view-controller view

我正在尝试练习我的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 个答案:

答案 0 :(得分:1)

如果您想在列表更新时收到通知,可以使用ObservableCollection。每当您的列表被修改时,它都会触发一个事件。

此外,我不确定您是否正确使用该模型。 m_model.processUrl(url);是塞特吗?如果不是,您应该将逻辑从该方法移动到控制器中。该模型应该只以最小(或没有)逻辑存储数据。