Java開發筆記(一百三十五)Swing的文件對話框

除了常規的提示對話框,還有一種對話框也很常見,它叫作文件對話框。文件對話框又分爲兩小類:打開文件的對話框、保存文件的對話框,但在Swing中它們都用類型JFileChooser來表達。下面是JFileChooser的經常使用方法說明:
setDialogTitle:設置文件對話框的標題。
setApproveButtonText:設置肯定按鈕的文本。
setCurrentDirectory:設置文件對話框的初始目錄。
setMultiSelectionEnabled:設置是否支持選擇多個文件。取值true表示支持多選,false表示不支持多選,默認不容許多選。
setFileSelectionMode:設置文件的選擇模式。選擇模式有三種:JFileChooser.FILES_ONLY(只顯示文件,不過實際測試發現也會顯示目錄),JFileChooser.DIRECTORIES_ONLY(只顯示目錄),JFileChooser.FILES_AND_DIRECTORIES(顯示文件與目錄)。
setFileFilter:設置文件挑選的過濾器。
setDialogType:設置對話框的類型。取值JFileChooser.OPEN_DIALOG表明這是文件打開對話框,JFileChooser.SAVE_DIALOGG表明這是文件保存對話框。
showOpenDialog:顯示文件打開對話框。該方法的返回值體現了文件選擇與否,爲JFileChooser.APPROVE_OPTION時表示在對話框上按下了肯定按鈕,爲JFileChooser.CANCEL_OPTION時表示在對話框上按下了取消按鈕。
showSaveDialog:顯示文件保存對話框。該方法的返回值說明同showOpenDialog。
getSelectedFile:獲取當前選中的文件對象。
getSelectedFiles:僅在多選狀況下,獲取當前選中的文件對象數組。
上述方法當中,尤其須要注意的是setFileFilter,乍看起來該方法的輸入參數爲FileFilter類型,但它並不是java.io下面的文件過濾器,而是Swing自帶的文件對話框過濾器。這個過濾器與IO庫的同名過濾器相比,同樣擁有accept方法判斷當前文件是否知足過濾條件;不一樣之處在於,文件對話框的過濾器多了個getDescription方法,該方法的返回字符串要顯示在對話框內部的文件類型下拉列表中,至關於給文件類型作個補充說明。例如,txt類型俗稱文本文件,jpg、gif、png幾個類型合稱圖片文件,ppt、pptx類型稱做幻燈片文件等等。具體的文件過濾器調用代碼示例以下:html

		JFileChooser chooser = new JFileChooser(); // 建立一個文件對話框
		chooser.setCurrentDirectory(new File("E:/")); // 設置文件對話框的當前目錄
		chooser.setFileFilter(new FileFilter() { // 設置文件對話框的文件過濾器
			@Override
			public boolean accept(File file) { // 判斷當前文件是否知足過濾條件,只有知足條件的纔會顯示在對話框中
				// 目錄知足條件,擴展名爲txt的文件也知足條件
				return file.isDirectory() || file.getName().toLowerCase().endsWith(".txt");
			}

			@Override
			public String getDescription() { // 獲取過濾器的描述
				return "*.txt(文本文件)";
			}
		});

接下來演示看看如何操做文件對話框,先給一個按鈕註冊單擊監聽器,在單擊按鈕時調用showOpenDialog方法彈出文件對話框。以文件打開對話框爲例,具體的調用代碼以下所示:java

		btnOpenFile.addActionListener(new ActionListener() { // 給按鈕註冊一個點擊監聽器
			@Override
			public void actionPerformed(ActionEvent e) { // 發生了單擊事件
				// 設置文件對話框的類型,這裏的對話框準備打開文件
				chooser.setDialogType(JFileChooser.OPEN_DIALOG);
				// 顯示文件打開的對話框
				int result = chooser.showOpenDialog(frame);
				if (result == JFileChooser.APPROVE_OPTION) { // 單擊了肯定按鈕
					// 獲取在文件對話框中選擇的文件
					File file = chooser.getSelectedFile();
					label.setText("<html>準備打開的文件路徑爲:" + file.getAbsolutePath() + "</html>");
				} else { // 未單擊肯定按鈕
					label.setText("取消打開文件");
				}
			}
		});

 

運行測試程序,單擊按鈕彈出的文件打開對話框以下圖所示。數組


雙擊進入文件對話框裏面的下級目錄,找到某個文本文件並單擊它,文件對話框的「文件名」一欄顯示該文件的名稱,表示已經選中這個文件,此時對話框界面以下圖所示。框架

而後單擊對話框下方的「打開」按鈕,回到以下圖所示的程序主界面,可見主界面成功獲知剛纔選中文件的完整路徑。ide



一樣給另外一個按鈕註冊單擊監聽器,在單擊按鈕時調用showSaveDialog方法彈出文件保存對話框,此時的調用代碼以下所示:測試

		btnSaveFile.addActionListener(new ActionListener() { // 給按鈕註冊一個點擊監聽器
			@Override
			public void actionPerformed(ActionEvent e) { // 發生了單擊事件
				// 設置文件對話框的類型,這裏的對話框準備保存文件
				chooser.setDialogType(JFileChooser.SAVE_DIALOG);
				// 顯示文件保存的對話框
				int result = chooser.showSaveDialog(frame);
				if (result == JFileChooser.APPROVE_OPTION) { // 單擊了肯定按鈕
					// 獲取在文件對話框中選擇的文件
					File file = chooser.getSelectedFile();
					label.setText("<html>準備保存的文件路徑爲:" + file.getAbsolutePath() + "</html>");
				} else { // 未單擊肯定按鈕
					label.setText("取消保存文件");
				}
			}
		});

 

運行測試程序,單擊按鈕彈出的文件保存對話框以下圖所示。字體


與文件打開對話框相比,文件保存對話框的左上角標題由「打開」改成「保存」,下方的「打開」按鈕改成「保存」按鈕,除了這兩個地方有變化,其它都如出一轍。在對話框的「文件名」一欄填寫待保存的文件名,而後單擊「保存」按鈕,回到以下圖所示的程序主界面,可見主界面成功獲知那個待保存文件的完整路徑。component


文件對話框的內部字體也不能經過setFont方法直接修改,緣由很簡單,對話框只是一個框架,框架內部又有許多控件,故而須要遍歷這些內部控件,再一一設置每一個控件的文本字體。詳細的對話框字體設置方法定義以下:orm

	// 設置對話框的內部字體。第一個參數須要傳入文件對話框的實例
	private static void setComponentFont(Component component, Font font) {
		component.setFont(font); // 設置當前組件的字體
		if (component instanceof Container) { // 若是該組件是容器
			Container container = (Container) component; // 把該組件強制轉爲容器
			int count = container.getComponentCount(); // 獲取容器內部的組件數量
			for (int i = 0; i < count; i++) { // 遍歷該容器的全部組件
				// 給每一個組件再設置一遍內部字體
				setComponentFont(container.getComponent(i), font);
			}
		}
	}

 



更多Java技術文章參見《Java開發筆記(序)章節目錄htm

相關文章
相關標籤/搜索