2011-02-09 32 views
4

我使用JFileChooser作爲導出功能的一部分。我希望用戶能夠從JFileChooser的文件查看器中選擇一個文件,或者在文件名文本框中輸入文件的名稱。從我讀過的文章中可以得到使用getSelectedFile()方法得到的值,所以我有一些監聽者調用getSelectedFile(),並在執行導出前嘗試做一些檢查。從jFileChooser組件創建文件

我遇到的問題是getSelectedFile()方法返回null,當我手動輸入名稱到文件名文本框中。要添加更多的混亂,getSelectedFile()方法也有三種不同的情況下工作:

  1. 我通過setSelectedFile()填充它(用戶點擊從表中的值,我用setSelectedFile()
  2. 我一下現有文件文件查看器
  3. 我打填充文件名的文本框

我有三個文件過濾器,但也有同樣的行爲,不管他們是否被啓用與否之後按Enter鍵。是

聽衆調用getSelectedFile()如下:

  • 事件偵聽器的keyReleased
  • 事件偵聽器的mousePressed。在我的JFileChooser
  • 的動作監聽我的JFileChooser

  • PropertyChangeEvent的聽衆有沒有更好的方式來聽我的JFileChooser,以獲取用戶輸入?我覺得我失去了非常明顯的東西......任何幫助表示讚賞!

    編輯 一點的詳細信息...

    我有一個JSplitPane一個JFileChooser組件,它是在JFrame。我不會撥打showOpenDialog以獲取用戶的輸入。該組件可作爲表單的一部分訪問。

    我想要做的是聽他/她鍵入的用戶輸入。我有一個'開始導出'按鈕,我想要禁用該功能,直到用戶在JFileChooser組件的文件名文本框中輸入了一個有效的文件名爲止。要做到這一點我有一個KeyEvent的聽衆,我想用它來獲取文件名作爲用戶鍵入它

    進一步編輯

    這裏是動作監聽器代碼:

    jFileChooserExport.addActionListener(new java.awt.event.ActionListener() { 
         public void actionPerformed(java.awt.event.ActionEvent evt) { 
          jFileChooserExportActionPerformed(evt); 
         } 
        }); 
    

    我也有一個屬性更改偵聽這裏:

    jFileChooserExport.addPropertyChangeListener(new java.beans.PropertyChangeListener() { 
         public void propertyChange(java.beans.PropertyChangeEvent evt) { 
          jFileChooserExportPropertyChange(evt); 
         } 
        }); 
    

    裏面都jFileChooserExportPropertyChange和jFileC的hooserExportActionPerformed我想通過調用getSelectedFile()來獲取用戶選擇的文件。然而,在兩種情況下,直到用戶執行上述三種方法之一,它纔會保持空白。

  • +0

    FWIW我今天大部分時間都在試圖讓它發生,並將其追蹤到一個私人的JTextField,但無法訪問。相反 - 我將控件放在一個名爲'fileChooser.setAccessory(controlPanel)'的面板中,並使用'filechooser.showSaveDialog()'來顯示錶單。 – whrrgarbl

    回答

    2

    閱讀有關How to Use File Choosers的Swing教程中的部分。那裏的演示代碼適合我。

    +0

    謝謝,我已經閱讀了該教程(以及他們的演示對我的作品),因爲我搜索了一個答案,但沒有看到任何解決我的具體問題的東西。雖然我可能錯過了,你能告訴我教程會在哪裏幫助嗎? – dMoto

    0

    由於沒有任何的下面似乎工作,你可能會想嘗試add a PropertyChangeListener您的JFileChooser,監聽SELECTED_FILE_CHANGED_PROPERTY


    什麼可能是可能發生的是,你的文件選擇可能有multi selection enabled,其中case getSelectedFile將返回null,但getSelectedFiles將返回包含所選文件的數組。您可能想要disable multi selection或使用數組(如果您希望用戶只選擇一個文件,請將multiSelectionEnabled設置爲false)。

    另一種可能性,雖然是如果你試圖讓所選擇的文件,但fileChooser.showOpenDialogfileChooser.showSaveDialog既不是所謂的卻還是沒回JFileChooser.APPROVE_OPTION

    而且,我相信JFileChooser中是大小寫敏感的,所以如果文件名是「Foo.bar」,你輸入「FoO.bar」,它會認爲你想要別的東西。

    +0

    有趣的是,我會試一試,讓你知道它是怎麼回事... – dMoto

    +0

    禁用多選擇有同樣的結果。我不使用showOpenDialog或showSaveDialog,讓我嘗試調用jFileExport.approveSelection()並處理該事件... – dMoto

    +0

    @dMoto嗯。也許我們需要更多關於你想要做什麼的信息? –