2016-06-10 44 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(); 

會給你選定的值(如果列表有一些選擇),而不考慮監聽器。