2013-04-15 33 views
-1

這裏是我的代碼來創建一個JList和使用動作監聽器滾輪上的jList

在我使用的字符串數組來填充JList和我有滾動首位填充它。 然後,爲了更新Jlist,我需要將Jlist的模式更改爲DefaultListModel,並且一旦我做了更改,我就會丟失我的滾動條。

我DONOT知道錯在哪裏

任何一個可以幫我請

private Component makeListView() { 
     final DefaultListModel<String> listModel = new DefaultListModel<String>(); 
     final JList<String> list = new JList<String>(listModel); 
     list.setModel(listModel); 
     updateCourseListPanel(listModel); 
     notifyObserverInModelForClickingOnListItem(list);  
     list.setPreferredSize(getSize()); 
     list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); 
     list.setLayoutOrientation(JList.HORIZONTAL_WRAP); 
     list.setVisibleRowCount(-1);   
     list.setFixedCellWidth(80); 
     JScrollPane listScroller = new JScrollPane(list); 
     listScroller.setPreferredSize(getMaximumSize()); 
     setVisible(true);  
     return list; 
    } 

回答

2

很難從你的片段,告訴(因爲你沒有顯示調用它的代碼):上面值,問題是你返回的是列表而不是它添加的scrollPane。

更深層次的問題是,你似乎(只是猜測,因爲缺乏細節:-)每當數據需要更新時重新創建列表。更好的辦法是到列表的創建和它的模型從它的更新分割,僅根據需要進行更新模型:

private Component makeListView() { 
    final DefaultListModel<String> listModel = new DefaultListModel<String>(); 
    final JList<String> list = new JList<String>(listModel); 
    list.setModel(listModel); 
    list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); 
    list.setLayoutOrientation(JList.HORIZONTAL_WRAP); 
    list.setFixedCellWidth(80); 
    JScrollPane listScroller = new JScrollPane(list); 
    return listScroller; 
} 

private void update(Jlist list) { 
    updateCourseListPanel(list.getModel()); 
    notifyObserverInModelForClickingOnListItem(list);  
} 

BTW,從未調用過任何setXXSize方法,some reasons