2015-08-18 2 views
0

Я пытаюсь следовать шаблону 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); 
} 
+0

вы обновляете свой графический интерфейс, как только Вы управляете вашей модели? –

+0

@MartinFrank yesa Я называю это в классе контроллера 'theView.updateUI();' который выполняет это 'metaDataPanel.validate();' –

+0

Где вы устанавливаете 'model' в' JList'? Я не вижу 'JList.setModel()' вызов где угодно. – Codebender

ответ

0

Вы не устанавливать модели в JList.

Когда вы делаете,

model = new DefaultListModel(); 
musicJList = new JList(model); 

производства модель JList «s устанавливается на new DefaultListModel() объекта.

Но после этого, вы делаете,

theView.setListModel(theModel.getListModel()); // You should put this new model to the JList. 

Итак, в вас setListModel() метод, сделать

public void setListModel(DefaultListModel model){ 
    this.model = model; 
    this.musicJList.setModel(this.model); // Add this line. 
    albumLabel.setText(Integer.toString(model.getSize())); 
} 
+0

Работал как шарм. благодаря! –

Смежные вопросы