java - 正确使用 MVC 模式在 Swing 中使用数据填充 Jlist

标签 java swing model-view-controller

我正在编写一个 MVC 应用程序。我有一个 JList,我确实需要用模型/ Controller 上烘焙的数据填充它。

我不知道如何在不破坏MVC模型的情况下将数据传递给View;这是在 View 上存储/创建数据。

这是我的代码的缩小和简化版本。

// This class receives data and works on it. Is not related to show 
// what it does for the purposes of my question. Just know that the 
// data that I want to show on the JList on the view should be created 
// here.
// 
// public class controller implements Observer{
// }

这是 View :

// Imports

    public class View extends JPanel {


        public View() {
            super();

            JList itemList = new JList();
            DefaultListModel listModel = new DefaultListModel();

            itemList.setModel(listModel);

            listModel.addElement("Element1");
            listModel.addElement("Element2");
            listModel.addElement("Element3");
            listModel.addElement("Element4");
            listModel.addElement("Element5");
            listModel.addElement("Element6");

            itemList.setFont(new Font("Arial",Font.BOLD,40));

            this.setLayout(new GridLayout());
            JButton button = new JButton("New Time");
            JButton button1 = new JButton("New Time2");
            label.setFont(new Font("Serif", Font.PLAIN, 50));

            JPanel group = new JPanel( new GridLayout())
                    ;
            group.add(button);
            group.add(button1);

            JPanel east = new JPanel( new BorderLayout() );

            east.add(label, BorderLayout.NORTH);
            east.add(itemList, BorderLayout.CENTER);
            east.add(group, BorderLayout.SOUTH);

            add(east, BorderLayout.EAST);

        }

    }

因此,在 View 的 JList 中,我需要显示项目,但我不知道如何从 Controller /模型上创建的数据填充 JList。我只知道如何按照我在 View 上所做的方式添加元素,这是错误的。

我不知道是否可以告诉 Jlist 使用在 Controller /模型上创建的数据。

欢迎任何帮助!

谢谢!

最佳答案

I don't know how to pass the data to the View without breaking the MVC model; this is storing/creating data on the View.

您可以将“ Controller ”设为 ListModel,然后可以让它代理来自底层模型的数据,或者作为另一个 ListModel 或通过原始模型的信息模型正在提供。

在我看来,这太过分了,而且浪费了你很多时间。

Swing 已经实现了 MVC,有点像 MV-C,尝试在其之上包装另一个(纯)MVC 总是会出现问题。

相反,模型应该以数组或列表的形式提供一些数据,这些数据可以传递到 View 以供 View 以 View 决定的最佳方式呈现。

在这种情况下, View 不是“创建数据”,因为该数据是由 Controller 通过模型提供的。

无论你做什么,你都会发现 View 必须在某种程度上维护对数据的引用,例如,JTextField将以String<的形式存储数据 - 它必须这样做,不这样做它就无法工作。

这只是我的意见,但我以前曾遇到过这些问题。关注数据的需求,关注如何以将每一层与另一层解耦的方式与模型、 Controller 和 View 进行通信(即,不要将 UI 元素暴露给 Controller ,它不关心“如何“它是受管理的,只是 View promise 提供一些信息)。

通过这种方式,您可以更改模型、 View 和/或 Controller 的实现,其他人都不应该关心,它应该继续工作

关于java - 正确使用 MVC 模式在 Swing 中使用数据填充 Jlist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46945958/

相关文章:

java - 使用java创建多条目zip文件时出现问题

java - 棋盘游戏的 GUI 操作

java - 命令行上的 MVC

javascript - 单击 td 行时获取 td 值。 MVC

java - 这个 Oracle 特定查询的 HQL 等价物是什么?

java - 打印字母的for循环

java - 自定义 Java Swing Meter 控件

java - 如何在 Java 中最小化/图标化 JWindow?

java - requestFocus() 适用于 Mac,但不适用于 Windows

java - JTextArea:如何将行、列转换为偏移量?