Я пытаюсь следовать шаблону MVC, поэтому у вас есть 3 класса. Элементы добавляются к модели успешно, а затем передаются в представление. Ничего не используется в JList, который появляется на экране, он просто остается пустым. Вот код и спасибо всем, кто может помочь! Когда я устанавливаю свой формат albumLabel на размер модели, он получает значение 1050, поэтому я могу предположить, что данные возвращаются к моему классу вида, а не к дисплею. Все объявлено, и я оставил некоторые биты, которые не связаны с этим.Java DefaultListModel не добавлен в JList
Мой класс контроллера
class BrowseListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
chooser = new JFileChooser();
chooser.setCurrentDirectory(new java.io.File("."));
chooser.setDialogTitle(choosertitle);
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setAcceptAllFileFilterUsed(false);
theModel.getMusicList(chooser);
theView.setListModel(theModel.getListModel());
theView.updateUI();
}
}
Моя модель класса
public ArrayList<File> getMusicList(JFileChooser chooser){
if(chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){
File folder = new File(chooser.getSelectedFile().getPath());
displayDirectoryContents(folder);
if(allMusic.size() <= 0)
{
System.out.println("No music files found");
}
}
else{
System.out.println("No Selection ");
}
return allMusic;
}
public void displayDirectoryContents(File dir) {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
displayDirectoryContents(file);
}
else if(file.getName().endsWith(".mp3")) {
allMusic.add(file);
model.addElement(file.getAbsolutePath());
System.out.println("file:" + file.getAbsolutePath());
}
}
}
public DefaultListModel getListModel(){
return model;
}
Мой Посмотреть Класс
MP3View(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(600, 200);
model = new DefaultListModel();
musicJList = new JList(model);
metaDataPanel.add(new JScrollPane(musicJList), BorderLayout.CENTER);
this.add(metaDataPanel);
}
public void setListModel(DefaultListModel model){
this.model = model;
albumLabel.setText(Integer.toString(model.getSize()));
}
void addBrowseMusicListener(ActionListener listenForBrowse){
browseButton.addActionListener(listenForBrowse);
}
вы обновляете свой графический интерфейс, как только Вы управляете вашей модели? –
@MartinFrank yesa Я называю это в классе контроллера 'theView.updateUI();' который выполняет это 'metaDataPanel.validate();' –
Где вы устанавливаете 'model' в' JList'? Я не вижу 'JList.setModel()' вызов где угодно. – Codebender