Java DefaultListModel未添加到JList

时间:2015-08-18 08:30:32

标签: java model-view-controller jlist defaultlistmodel

我试图遵循MVC模式,因此有3个类。元素将成功添加到模型中,然后传递到视图上。屏幕上显示的JList中没有显示任何内容,它只是保持空白。下面是代码,感谢任何可以提供帮助的人!当我将albumLabel文本设置为模型的大小时,它被设置为1050,所以我可以假设数据返回到我的视图类,而不是显示。一切都被宣布,我遗漏了一些与此无关的部分。

我的控制器类

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);
}

1 个答案:

答案 0 :(得分:0)

您没有将模型设置为JList

当你这样做时,

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

JList的模型设置为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()));
}