Jlist上的滚动条

时间:2013-04-15 04:36:17

标签: java swing jlist

这是我创建Jlist并使用动作侦听器填充它的代码

首先,我使用了一个字符串数组来填充Jlist,我有了滚动条。 然后,为了更新Jlist,我需要将Jlist的模式更改为DefaultListModel,一旦我做了更改,我就丢失了我的滚动条。

我不知道出了什么问题

任何人都可以帮助我

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;
    }

1 个答案:

答案 0 :(得分: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