2016-06-10 46 views
1

我有一点问题。我不明白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给我我选择的值。但也许这是一种方法,将从模型中调用,但在幕后?

回答

1

它被认为是MVC使代码易于阅读和迁移,即使它有助于scallability。 因此,如果您在表单中使用MVC执行程序,那么当您想要创建未来的Web版本时,您将能够轻松迁移代码。

2

默认(ListModel)用于添加您的模型数据。当数据被添加到模型中时,它会自动刷新Jlist。选择模型将跟踪列表中的选择。

现在ListSelectionListener。当你想要选择事件的一些通知时,你可以实现这个。如果你不需要通知你不必使用。

假设我有一个Jlist有一个模型。而这个模型对应于一个表单数据。所以,如果你想设计一个用户界面,点击你想要将模型数据加载到表单的列表,你可以添加ListSelectionListener。

list.getSelectedValue(); 

会给你选定的值(如果列表有一些选择),而不考虑监听器。