如何做一个JList MVC风格?

时间:2013-10-31 18:17:48

标签: java swing model-view-controller jlist

我一直在尝试使用MVC实现一个简单的JList。 Basicaly,显示JList并在其下添加一个按钮来删除项目。我想将AbstractListModel用于模型,因为稍后我想要的不仅仅是一个简单的ArrayList作为数据。

我在以适当的MVC方式使用JList时遇到了麻烦。例如,在视图中我创建列表。但是这个列表需要模型(addModel(方法),并在View中添加)。 这看起来很奇怪,因为我认为在MVC中View不知道该模型。 我也不知道应该把什么放在控制器中。

无论如何,如果有人可以给我指导来实现它,那就太好了。

这是我开始的代码:

public class SimpleJlist extends JFrame
{
    public static void main(String[] args)
    {
        Controller controller = new Controller();
        View view = new View(controller);
        Model model = new Model();

        SimpleJlist jl = new SimpleJlist();

        jl.setLayout(new FlowLayout());
        jl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jl.add(view);

        jl.setVisible(true);
        jl.pack();

    }
}

public class View extends JPanel implements ListDataListener, ActionListener
{
    Controller controller;
    JButton button;
    JList list;

    public View(Controller controller)
    {
        this.controller = controller;
        button = new JButton("Delete");

        /* Creation of the Jlist, but need the model. */

    }

    /* For the button */
    public void actionPerformed(ActionEvent event) { }
    /* For the list */
    public void contentsChanged(ListDataEvent event) { }
    public void intervalAdded(ListDataEvent event) { }
    public void intervalRemoved(ListDataEvent event) { }

}

public class Model extends AbstractListModel 
{
    private ArrayList<String> names;

    public Model()
    {
        names = new ArrayList<String>();
        /* add names... */
    }

    public void deleteElement(int index) { names.remove(index); }
    public String getElementAt(int index) { return names.get(index); }
    public int getSize() { return names.size(); }
}

代码远远没有完全显示出来,但这是关于我想知道下一步该怎么做的地方......

控制器不存在,因为我根本不确定要放入什么。

1 个答案:

答案 0 :(得分:1)

  

我一直在尝试使用MVC实现一个简单的JList。

Swing组件已经以类似MVC的风格设计。您只需要使用组件。 LIstModel是模型,JList是组合的视图控制器。您不会创建名为Model-View-Controller的其他类。

  

基本上,显示JList并在其下添加一个删除项目的按钮。

阅读How to Use Lists上Swing教程中的部分,了解如何在DefaultListModel中添加/删除项目的示例

  

我想将AbstractListModel用于模型,因为稍后我想要的不仅仅是一个简单的ArrayList作为数据。

没关系,你所做的就是更换模型。假设您的模型在数据更改时调用正确的fireXXX()方法,则不需要在执行此操作时对JList进行任何更改。

您还应该查看How to Use Models上的Swing教程中的部分,其中显示了如何将MVC方法用于您自己的自定义组件。