Java Jlist上的滚动条

Java Jlist上的滚动条,java,swing,jlist,Java,Swing,Jlist,下面是我创建Jlist并使用action listener填充它的代码 首先,我使用了一个字符串数组来填充Jlist,并使用了滚动条。 然后为了升级Jlist,我需要将Jlist的模式更改为DefaultListModel,一旦更改,我的滚动条就丢失了 我不知道出了什么问题 有人能帮我吗 private Component makeListView() { final DefaultListModel<String> listModel = new Default

下面是我创建Jlist并使用action listener填充它的代码

首先,我使用了一个字符串数组来填充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;
    }

很难从您的代码片段中分辨出来,因为您没有显示调用它的代码:从表面上看,问题是您返回的是列表,而不是它添加到的滚动窗格

更深层次的问题是,由于缺乏细节,您似乎只是在猜测:-在需要更新数据时重新创建列表。更好的方法是将列表及其模型的创建与其更新分开,并仅根据需要更新模型:

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);       
 }
顺便说一句,永远不要调用任何setXXSize方法