Java DefaultListModel 未添加到 JList
Java DefaultListModel not added to JList
我正在尝试遵循 MVC 模式,所以有 3 个 classes。元素已成功添加到模型中,然后传递到视图中。出现在屏幕上的 JList 中没有显示任何内容,它只是保持空白。这是代码,感谢任何可以提供帮助的人!当我将我的 albumLabel 文本设置为模型的大小时,它被设置为 1050,因此我可以假设数据返回到我的视图 class,只是没有进入显示。一切都已声明,我遗漏了一些与此无关的部分。
我的控制器class
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();
}
}
我的模型Class
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;
}
我的观点Class
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);
}
您没有将模型设置为 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()));
}
我正在尝试遵循 MVC 模式,所以有 3 个 classes。元素已成功添加到模型中,然后传递到视图中。出现在屏幕上的 JList 中没有显示任何内容,它只是保持空白。这是代码,感谢任何可以提供帮助的人!当我将我的 albumLabel 文本设置为模型的大小时,它被设置为 1050,因此我可以假设数据返回到我的视图 class,只是没有进入显示。一切都已声明,我遗漏了一些与此无关的部分。
我的控制器class
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();
}
}
我的模型Class
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;
}
我的观点Class
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);
}
您没有将模型设置为 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()));
}