簡體   English   中英

JFileChooser選擇空文件

[英]JFileChooser choose empty file

我正在使用JFileChooser作為JTable單元的編輯器。 我希望用戶使用JFileChooser選擇一個有效文件,然后當他們按Enter鍵時,文件路徑將保存到該單元格中。 如果他們要清除單元格,則會出現問題。 因此,我希望他們清除JFileChooser並將其設置為帶有空字符串的單元格(或null,以任何一個為准)。

我的問題是,如果您尚未選擇文件,則無法按“批准”按鈕。 在我的代碼中,“空!” 永遠不會打印。 沒有選擇文件時,是否有辦法允許批准按鈕被選中? 這是我嘗試過的:

JFileChooser component = new JFileChooser(){
        public void approveSelection(){
            File f = getSelectedFile();
            if(f==null){
                System.out.println("empty!");
                return;
            }else{
                if(!f.exists()){
                    System.out.println("does not exist!");
                }else{
                    super.approveSelection();
                }

            }
        }
    };

您可能有興趣覆蓋JFileChooser cancelSelection()方法,該方法在用戶取消文件選擇時調用。

使用JFileChooser選擇空文件名來進行JTable單元清除可能不直觀且用戶友好。 最好在JTable單元格旁邊有一個小按鈕,以便在用戶單擊它或其他任何選項以重置單元格值時清除單元格值,並且僅使用JFileChooser更改單元格中的文件路徑。

當您運行提供的代碼時,如果未選擇文件,則甚至不會進入approveSelection處理程序。 在內部,有防止空選擇的代碼。 此行為來自BasicFileChooserUI的ApproveSelectionAction方法,該方法檢查文件名是否為null,是否返回而不調用選擇器上的approveSelection,因此JFileChooser永遠不會收到有關已按下“接受”的通知。 這是一個非常丑陋的函數,因此即使您找到了訪問它的方法,也很難更改其行為。

解決此問題的幾種可能途徑:

1)您可以將JFileChooser嵌入另一個組件中,而顯示父組件。 然后,您將JFileChooser和自定義按鈕都添加到同一面板中,並為自定義按鈕添加按鈕處理。 自定義按鈕可以處理希望不選擇任何內容的用戶。 這篇文章可能會提供一些提示: 嵌入在JPanel中的JFileChooser

2)您可能會濫用JFileChooser的“附件”功能。 通常,它是“預期”的,用於顯示文件類型的預覽,但是由於它需要一個任意組件,因此沒有理由您不能在其中添加自己的“無文件”按鈕,並設置偵聽器並關閉對話框如果按下該按鈕,並將其應為空白值的通知發送到表格單元格。 比較容易。

3)您可以嘗試修改JFileChooser對話框,在“保存和取消”旁邊添加一個額外的按鈕。 這可能不是一件容易的事,您可能需要做一些棘手的事情才能找到“取消”按鈕,並將另一個按鈕添加到其父項。 僅當您是Java專家時才可行。

4)您可以創建某種“偽” /特殊文件,如果選中該文件,則會對常規處理方式造成例外,並顯示空白文件名而不是真實文件名。

我想知道您是否可以編寫一個擴展JFileChooser的類,並修改文本字段,以便清除它不會禁用“接受”按鈕。

暫無
暫無

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

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