2009-12-01 31 views
0

我正在開發一個java項目,用戶必須通過jfilechooser選擇要上傳的文件。無論如何,只要將文本字段設置爲只讀,以便您只能通過單擊來選擇文件,而不是通過在文本字段中寫入。我希望我讓我的問題清楚; Djava filechooser

+0

出來的純粹的好奇心,是名爲「example.buab」的文件? – 2009-12-01 12:16:02

回答

1

我不認爲這是直接可能的 - 根據the API判斷,我認爲情況並非如此。您可以通過註冊一個在每次按鍵後清除文本框的偵聽器來模擬它。

然而,你是否肯定你想這樣做?就我個人而言,如果我使用的文件選擇器以這種方式被損壞,尤其是如果我從某處複製文件路徑到剪貼板並被迫通過一堆目錄手動下載,以及其他情況。

是否有一個特定的原因要削弱用戶界面?因爲我看不到任何合法的理由這樣做...

+0

好吧,這只是一個簡單的方法來確保選定的文件是一個實際的文件。我想我只需要在我開始上傳之前檢查文件是否存在 – ev00l 2009-12-01 11:07:35

1

這不是一個真正的答案嘗試,但我會問爲什麼你想讓文本字段只讀。你正在限制用戶和確切的收益?除非你有很好的理由這樣做,否則改變文件選擇器的標準預期行爲通常不是一個好方法。

所以,對不起,沒有真正的答案,但請考慮一下爲什麼你想這樣做。作爲我喜歡能夠在文本字段中編寫的個人偏好。這使我能夠進行粘貼,這允許從一個目錄到另一個目錄的極其快速和簡單的導航。

+0

我可以看到爲什麼這是一種確保文件存在的非常糟糕的方式。感謝您的幫助 – ev00l 2009-12-01 11:08:33

0

我認爲要做到這一點的唯一方法是提供您自己的FileChooserUI並通過上的setUI()進行設置。當您從javax.swing.plaf包中對現有實現進行子類化時,執行此操作可能沒有太多工作,但問題在於您要繞過PLAF整個機制;更改全局L & F將不適用於您的文件選擇器。

2

如果您的目的是確保用戶選擇了一個文件而不是目錄(暗示您對其他答案的迴應),您可以使用FileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);。但是,這是實例化文件選擇器時的默認設置,因此除非您的代碼在某些時候更改了該值,否則不需要明確設置它。

爲您的觀賞樂趣:http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html

2

如果你想確保輸入的文件名是關閉的文件選擇之前有效,那麼你應該能夠做這樣的事情:

JFileChooser chooser = new JFileChooser(...) 
{ 
    public void approveSelection() 
    { 
     if (getSelectedFile().exists()) 
      super.approveSelection(); 
     else 
      JOptionPane.showMessageDialog(this, "Selected file does not exist"); 
    } 
}; 
+0

非常感謝,我會試試這個! – ev00l 2009-12-02 12:37:40