2011-08-26 27 views
17

我創建了一個接口,我想添加一個允許用戶打開文件的函數。我正在使用AWT。我不明白如何使用FileDialog。你可以給我一個例子或一個很好的鏈接來解釋這個嗎?如何使用FileDialog?

+1

參見['FileDialogTest'](http://stackoverflow.com/questions/2914627/file-explorer-using-java-how-to-go-about-it/2914733#2914733)。 – trashgod

回答

3

有幾個代碼示例here演示如何將它用於各種不同的任務。

也就是說,您可能需要退一步,檢查awt是否是這裏工作的最佳任務。當然有一些合理的理由將它用在swing/swt之類的東西上,但如果你剛開始使用Swing,IMO會是更好的選擇(有更多的組件,更多的教程,它是一個更廣泛需求的庫來處理。這些天)

+1

鏈接導致的所有三個代碼示例都是完全相同的......(只是說,如果它們看起來相似,那麼您並不瘋狂......) – ArtOfWarfare

26

一個完整的代碼示例,用文件過濾:

FileDialog fd = new FileDialog(yourJFrame, "Choose a file", FileDialog.LOAD); 
fd.setDirectory("C:\\"); 
fd.setFile("*.xml"); 
fd.setVisible(true); 
String filename = fd.getFile(); 
if (filename == null) 
    System.out.println("You cancelled the choice"); 
else 
    System.out.println("You chose " + filename); 
+1

這有助於很多,它比JFileChooser更快,遺憾的是它並沒有很好地處理異常情況,'零'字讓我沮喪。 – iKlsR

7

要通過@TheBronx添加到答案 - 對我來說,​​不工作在OS X上這工作:

fd.setFilenameFilter(new FilenameFilter() { 
    @Override 
    public boolean accept(File dir, String name) { 
     return name.endsWith(".txt"); 
    } 
}); 

或作爲Java 8 lambda:

fd.setFilenameFilter((dir, name) -> name.endsWith(".txt")); 
+1

不能在Ubuntu上工作。這解決了它。 –

+1

偉大的解決方案,但它不會在Windows上工作。 https://docs.oracle.com/javase/7/docs/api/java/awt/FileDialog.html#setFilenameFilter%28java.io.FilenameFilter%29 –

+1

@KenoClayton True。我認爲跨平臺解決方案是使用'setFile'和'setFilenameFilter'。 –