Я написал программу, которая выбирает файлы и добавляет их в JList. Программа отлично работает, и код, чтобы добавить файлы в список, как это:Невозможно добавить в JList, когда список добавлен в JScrollPane
JPanel pane;
File newFile[];
static List<File> files = new ArrayList<File>();
static DefaultListModel<File> listModel = new DefaultListModel<>();
JList<File> fileList = new JList<>(listModel);
JPanel listPane = new JPanel();
pane.add(listPane, BorderLayout.CENTER);
listPane.setBackground(Color.LIGHT_GRAY);
listPane.setBorder(new EmptyBorder(0, 20, 0, 0));
listPane.setLayout(new BorderLayout());
listPane.add(fileList);
}
void getFile() {
final JFileChooser fc = new JFileChooser();
fc.setDialogTitle("Select File...");
fc.setApproveButtonText("Select");
fc.setMultiSelectionEnabled(true);
int returnVal = fc.showOpenDialog(pane);
if (returnVal == JFileChooser.APPROVE_OPTION) {
newFile = fc.getSelectedFiles();
}
}
void setFile() {
int i = 0;
while (i < newFile.length) {
files.add(newFile[i]);
listModel.addElement(newFile[i]);
i++;
}
}
Это базовый код для выбора и добавления файлов. Так что теперь я хочу, чтобы иметь полосы прокрутки на панели, поэтому я изменил его на JScrollPane так:
JScrollPane listPane = new JScrollPane();
pane.add(listPane, BorderLayout.CENTER);
listPane.setBackground(Color.LIGHT_GRAY);
listPane.setBorder(new EmptyBorder(0, 20, 0, 0));
listPane.setViewportView(fileList);
listPane.add(fileList);
}
Так что все компилируется без ошибок, но ничего не добавляют к JScrollPane. Я понимаю, что JScrollPane можно использовать как обычный JPanel, за исключением того, что он будет иметь полосы прокрутки при переполнении. Есть что-то в JScrollPanes, которых я здесь не хватает?
Рекомендации: 1) Добавьте список в панель прокрутки, когда панель прокрутки создана и добавлена в графический интерфейс. 2) После этого нужно иметь дело только с (добавьте элементы или удалите их) из модели. 3) Удалите 'static List files = new ArrayList ();' и получите любую информацию или 'Файл' непосредственно из модели. 4) Удалите префикс 'static' из' static DefaultListModel listModel = new DefaultListModel <>(); '. Статический редко является правильным решением (независимо от проблемы). 5) Для лучшей помощи, скорее всего, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). –