簡體   English   中英

從jFileChooser組件創建文件

[英]Creating a file from a jFileChooser component

我將JFileChooser用作導出功能的一部分。 我希望用戶能夠從JFileChooser的文件查看器中選擇一個文件,或者在文件名文本框中輸入文件的名稱。 根據我的閱讀,可以使用getSelectedFile()方法獲取該值,因此我有一些偵聽器調用getSelectedFile()並嘗試在執行導出之前進行一些檢查。

我遇到的問題是,當我手動在文件名文本框中輸入名稱時, getSelectedFile()方法返回null。 為了增加混亂, getSelectedFile()方法在以下三種情況下確實起作用:

  1. 我通過setSelectedFile()填充它(用戶單擊表中的值,然后使用setSelectedFile()
  2. 我在文件查看器中單擊一個現有文件
  3. 填充文件名文本框后,我按Enter

我有三個文件過濾器,但是無論是否啟用,它們都有相同的行為。

調用getSelectedFile()偵聽器如下:

  • key的事件監聽器
  • mousePressed的事件偵聽器。
  • 我的jFileChooser上的PropertyChangeEvent偵聽器
  • 我的jFileChooser上的動作監聽器

有沒有更好的方法來監聽我的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和jFileChooserExportActionPerformed的內部,我試圖通過調用getSelectedFile()獲得用戶選擇的文件。 但是,在兩種情況下,該值都保持為空,直到用戶執行上述三種方法之一為止

閱讀Swing教程中有關如何使用文件選擇器的部分 那里的演示代碼對我來說很好用。

由於以下內容似乎都不起作用,因此您可能想要嘗試將PropertyChangeListener添加到JFileChooser中,以偵聽SELECTED_FILE_CHANGED_PROPERTY


可能發生的情況是您的文件選擇器可能啟用了多重選擇 ,在這種情況下, getSelectedFile將返回null,但是getSelectedFiles將返回包含所選文件的數組。 您可能要禁用多重選擇 ,或者使用數組(如果您希望用戶僅選擇一個文件,請將multiSelectionEnabled設置為false)。

但是,另一種可能性是,如果嘗試獲取選定的文件,但尚未調用fileChooser.showOpenDialogfileChooser.showSaveDialog或未返回JFileChooser.APPROVE_OPTION

另外,我相信JFileChooser區分大小寫,因此,如果文件名是“ Foo.bar”並且您輸入“ FoO.bar”,它將認為您還需要其他內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM