1

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

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

无论如何,如果有人能给我指导来实现这一点,那就太好了。

这是我开始的代码:

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(); }
}

代码显然还远未完成,但这是我在想知道下一步该怎么做之前到达的地方......

控制器不在那里,因为我根本不知道该放什么。

4

1 回答 1

1

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

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

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

阅读 Swing 教程中有关如何使用列表的部分,以获取有关如何从 DefaultListModel 添加/删除项目的示例

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

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

您还应该查看 Swing 教程中关于如何使用模型的部分,该部分展示了如何将 MVC 方法用于您自己的自定义组件。

于 2013-10-31T18:26:55.983 回答