我一直在尝试使用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(); }
}
代码远远没有完全显示出来,但这是关于我想知道下一步该怎么做的地方......
控制器不存在,因为我根本不确定要放入什么。
答案 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方法用于您自己的自定义组件。