Java Swing中的模型/ MVC的用途
问题描述:
我有一点问题。我不明白ListModel和/或ListSelectionModel的目的。 我认为这对于Java Swing中的MVC模式/ UI委托原则非常重要。Java Swing中的模型/ MVC的用途
例如: 我有一个简单的JList并希望获得选定的值。所以我只需添加一个带有valueChanged方法的ListSelectionListener即可。
但是,我现在可以用(默认)模型或(默认)SelectionModel做什么? 或者模型可能在幕后行动?我认为您只能通过模型获取选定的数据,并使用此模型更改数据的值。 所以你需要一个模型,但你真的不实现一个自定义模型?
这里是我的代码:
String[] shoppingCart = {"Pen", "Paper", "Smartphone", "Cheese"};
JList list = new JList(shoppingCart);
c.add(list, BorderLayout.CENTER);
ListSelectionModel lsm = list.getSelectionModel();
ListModel lm = list.getModel();
System.out.println("lm: " + lm);
System.out.println("lsm: " + lsm);
list.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
//System.out.println(list.getSelectionModel().getValueIsAdjusting());
System.out.println("value changed " + list.getSelectedValue());
}
});
所以getSelectionModel给我我选择的值。但也许这是一种方法,将从模型中调用,但在幕后?
答
它被认为是MVC使代码易于阅读和迁移,即使它有助于scallability。 因此,如果您在表单中使用MVC执行程序,那么当您想要创建未来的Web版本时,您将能够轻松迁移代码。
答
默认(ListModel)用于添加您的模型数据。当数据被添加到模型中时,它会自动刷新Jlist。选择模型将跟踪列表中的选择。
现在ListSelectionListener。当你想要选择事件的一些通知时,你可以实现这个。如果你不需要通知你不必使用。
假设我有一个Jlist有一个模型。而这个模型对应于一个表单数据。所以,如果你想设计一个用户界面,点击你想要将模型数据加载到表单的列表,你可以添加ListSelectionListener。
list.getSelectedValue();
会给你选定的值(如果列表有一些选择),而不考虑监听器。