2016-03-07 77 views
0

我希望能夠顯示僅顯示文件名的文件列表,而不是整個文件路徑。顯示連接完整文件路徑時的文件名列表

目前我有一個文件列表。當我單擊其中一個文件時,監聽器會將這個文件傳遞給超出加載文件範圍的方法。

這意味着如果我只是傳遞一個文件名列表,它將不再起作用,因爲我的偵聽器需要一個完整的文件路徑。我對如何存儲一個文件名列表,同時將它們鏈接到完整的文件路徑沒有任何想法。

很高興回答您的任何問題。非常感謝,

注意:small 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; 
    } 

回答

1

填充列表視圖與File S,因爲你現在做的,並使用一個電池工廠列表視圖來更改顯示文件的方式:

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等)。

+0

儘管這個功能非常好,而且我很感激,現在當我點擊列表中的一個項目時,它會變慢,你會猜測可能導致它的原因。我認爲它可能會再生一些東西。 –

+0

沒有線索。這比使用自定義單元更有可能是您的監聽器代碼。 'updateItem(...)'方法被非常頻繁地調用,例如,如果您滾動,那麼如果出現性能問題,您會在除選擇項目之外的時間看到它們。 –

相關問題