2012-07-05 43 views
2

我有一個jfilechooser設置爲DIRECTORIES_ONLY模式。 我不喜歡我目前的jfilechooser,在directories_only模式下選擇文件夾顯示文件夾名稱中的完整絕對路徑。 有沒有什麼辦法可以覆蓋這種行爲只顯示文件夾名稱,就像文件的情況下一樣?jfilechooser如何在DIRECTORIES_ONLY模式下隱藏文件夾名稱中的完整路徑

我的JFileChooser是爲了 指定是要創建如果選擇一個文件夾內容保存到 或 文件夾的名稱,覆蓋該文件夾

回答

2

我不是在java中編寫代碼,而是在kawa(jvm scheme)中編寫代碼,所以我只能給出解決方案,就像我可以。

基本上我加入一個PropertyChangeListener到我的JFileChooser 覆蓋的propertyChange方法做如下 我聽的屬性更改SELECTED_FILE_CHANGED_PROPERTY和手動設置的文件名顯示給FileChooserUI內其是JFileChooser中的一部分。

請注意,所有這些僅僅是爲了美觀,所選的文件夾並未被改變。這只是文件名顯示不應該這樣完整的路徑,而只是你剛剛選擇的文件夾的名稱。

這裏是我嘗試編寫未經測試的java代碼。當我有更多時間時,我會再次測試。

JFileChooser folder_chooser = new JFileChooser(); 

folder_chooser.setFileSelectionMode (JFileChooser.DIRECTORIES_ONLY); 

PropertyChangeListener folder_name_changer = new PropertyChangeListener() { 
    public void propertyChange(PropertyChangeEvent e) { 
     String property_name = e.getPropertyName(); 
     JFileChooser chooser = e.getSource(); 
     if (property_name.equals(JFileChooserSELECTED_FILE_CHANGED_PROPERTY) { 
      File selected_file = chooser.getSelectedFile(); 
      FileChooserUI chooser_ui = chooser.getUI(); 

      // BasicFileChooserUI is the subclass that implements a setFileName method 
      if (selected_file != null && (chooser_ui instanceof BasicFileChooserUI)) { 
       chooser_ui.setFileName(selected_file.getFileName()); 
      } 
     } 
    } 
}; 

folder_chooser.addPropertyChangeListener(folder_name_changer); 
2

我有同樣的問題。我刪除了一些有關的模式設置爲DIRECTORIES_ONLY,而是使用了文件過濾器,以便只目錄將在瀏覽視圖顯示:

chooser.setFileFilter(new FileFilter() { 
    def accept(f: File) = f.isDirectory 
}) 

(對不起,這是斯卡拉,但它應該是足夠清楚)。

但是,如果您希望用戶能夠選擇要覆蓋的目錄,這對於您的第二個用例來說效果不佳。

+0

對不起,這並沒有解決我的問題,我想出了下面的解決方案。問題是,當我選擇了一個文件夾並按下保存時,我希望該程序覆蓋該文件夾或將其選爲我的導出目標。我不想打開文件夾。 – 2014-01-25 14:54:40

相關問題