gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:20:37 25 4
gpt4 key购买 nike

我正在编写一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com