【问题标题】:How to do a JList MVC style?如何做一个 JList MVC 风格?
【发布时间】:2013-10-31 18:17:47
【问题描述】:

我一直在尝试使用 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(); }
}

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

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

【问题讨论】:

  • 你想通过动态设计视图得到什么?

标签: java swing model-view-controller jlist


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-26
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多