我希望能够显示仅显示文件名而不是整个文件路径的文件列表。
目前我有一个文件列表。当我单击其中一个文件时,侦听器将其传递给超出范围的方法,该方法将加载文件。
这意味着如果我只是传递一个只是文件名的列表,它将不再起作用,因为我的监听器需要一个完整的文件路径。关于如何存储文件名列表同时将它们链接到完整文件路径,我没有任何想法。
很高兴回答您的任何问题。非常感谢,
注意:小的for循环显示了我如何从文件路径中提取文件名,但我目前没有对它进行任何操作。这只是向您展示我已经走了多远的一个例子。
public void GetFilesFromFolder(String dirName) throws IOException {
File dir = new File(dirName);
File[] files = dir.listFiles((File dir1, String filename) -> filename.endsWith(".mp3"));
String[] fileName = new String[files.length];
int x = 0;
for (File file : files) {
String fileTemp = file.toString();
fileTemp = fileTemp.substring(fileTemp.lastIndexOf("\\" + 1));
System.out.println(fileTemp);
fileName[x] = fileTemp;
System.out.println(fileName[x]);
x++;
}
observableList.clear();
observableList.addAll(files);
}
public void SetFileListView() throws IOException {
listView.setItems(null);
}
public VBox listStack() throws IOException {
vbox = new VBox();
vbox.getChildren().add(listView);
listView.setItems(observableList);
listView.setMinHeight(500);
MusicDataModel mdm = MainView.getMainView().musicDataModel;
MusicDataViewController mdv = MainView.getMainView().musicDataViewController;
listView.getSelectionModel().selectedItemProperty().addListener((ObservableValue<? extends File> observable, File oldValue, File newValue) -> {
try {
mdm.load(newValue.toString());
mdv.SetValues();
} catch (UnsupportedTagException | InvalidDataException | IOException | NotSupportedException ex) {
Logger.getLogger(FileListView.class.getName()).log(Level.SEVERE, null, ex);
}
});
return vbox;
}
答案 0 :(得分:2)
使用File
填充列表视图,就像当前一样,并使用列表视图上的单元工厂来更改文件的显示方式:
listView.setCellFactory(lv -> new ListCell<File>() {
@Override
protected void updateItem(File file, boolean empty) {
super.updateItem(file, empty);
setText(file == null ? null : file.getName());
}
});
这将确保列表视图中的每个单元格仅显示文件名(文件的完整路径的最后一个组件),尽管它仍然保留File
实例作为其数据(因此您可以仍然可以选择File
等。