这是我创建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;
}
答案 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