Java開發筆記(一百四十二)JavaFX的對話框

JavaFX的對話框主要分爲提示對話框和文件對話框兩類,其中提示對話框又分做消息對話框、警告對話框、錯誤對話框、確認對話框四種。這四種對話框都使用Alert控件表達,並經過對話框類型加以區分,例如AlertType.INFORMATION表示消息對話框,AlertType.WARNIN表示警告對話框,AlertType.ERROR表示錯誤對話框,AlertType.CONFIRMATION表示確認對話框。另外,Alert工具還提供了下列方法來操做對話框:
setTitle:設置對話框的標題。
setHeaderText:設置對話框的頭部文本。
setContentText:設置對話框的內容文本。
show:顯示對話框。
showAndWait:顯示對話框,並等待按鈕返回。該方法的返回類型是Optional<ButtonType>,它用來描述確認對話框選擇的是肯定按鈕仍是取消按鈕。html

接下來分別列舉幾種提示對話框的實現例子,首先是消息對話框,它的調用代碼示例以下:ide

		Button btn1 = new Button("消息對話框"); // 建立一個按鈕
		btn1.setOnAction(new EventHandler<ActionEvent>() { // 設置按鈕的單擊事件
			@Override
			public void handle(ActionEvent arg0) { // 處理單擊事件
				Alert alert = new Alert(Alert.AlertType.INFORMATION); // 建立一個消息對話框
				alert.setHeaderText("今日天氣"); // 設置對話框的頭部文本
				// 設置對話框的內容文本
				alert.setContentText("今天白天晴轉多雲,北轉南風二、3間4級,最高氣溫28℃;夜間多雲轉陰,南風2級左右,最低氣溫16℃。");
				alert.show(); // 顯示對話框
			}
		});
		flowPane.getChildren().add(btn1); // 往流式窗格上添加按鈕

 

運行包含以上代碼的測試程序,單擊按鈕後彈出的對話框以下圖所示,可見消息對話框的提示圖標是個內嵌感嘆號的圓圈。工具


其次是警告對話框,它的調用代碼示例以下:測試

		Button btn2 = new Button("警告對話框"); // 建立一個按鈕
		btn2.setOnAction(new EventHandler<ActionEvent>() { // 設置按鈕的單擊事件
			@Override
			public void handle(ActionEvent arg0) { // 處理單擊事件
				Alert alert = new Alert(Alert.AlertType.WARNING); // 建立一個警告對話框
				alert.setHeaderText("編譯警告"); // 設置對話框的頭部文本
				// 設置對話框的內容文本
				alert.setContentText("您在本代碼的第60行未初始化變量,可能致使空指針異常。");
				alert.show(); // 顯示對話框
			}
		});
		flowPane.getChildren().add(btn2); // 往流式窗格上添加按鈕

 

運行包含以上代碼的測試程序,單擊按鈕後彈出的對話框以下圖所示,可見警告對話框的提示圖標是個內嵌感嘆號的三角框。3d


再次是錯誤對話框,它的調用代碼示例以下:指針

		Button btn3 = new Button("錯誤對話框"); // 建立一個按鈕
		btn3.setOnAction(new EventHandler<ActionEvent>() { // 設置按鈕的單擊事件
			@Override
			public void handle(ActionEvent arg0) { // 處理單擊事件
				Alert alert = new Alert(Alert.AlertType.ERROR); // 建立一個錯誤對話框
				alert.setHeaderText("致命錯誤"); // 設置對話框的頭部文本
				// 設置對話框的內容文本
				alert.setContentText("系統即將關機,請趕忙保存文件。");
				alert.show(); // 顯示對話框
			}
		});
		flowPane.getChildren().add(btn3); // 往流式窗格上添加按鈕

 

運行包含以上代碼的測試程序,單擊按鈕後彈出的對話框以下圖所示,可見錯誤對話框的提示圖標是個內嵌叉號的圓角方框。htm

最後是確認對話框,它使用showAndWait方法替換了show方法,具體的調用代碼示例以下:對象

		Button btn4 = new Button("確認對話框"); // 建立一個按鈕
		btn4.setOnAction(new EventHandler<ActionEvent>() { // 設置按鈕的單擊事件
			@Override
			public void handle(ActionEvent arg0) { // 處理單擊事件
				Alert alert = new Alert(Alert.AlertType.CONFIRMATION); // 建立一個確認對話框
				alert.setHeaderText("舒適提示"); // 設置對話框的頭部文本
				// 設置對話框的內容文本
				alert.setContentText("尊敬的用戶,你真的要卸載我嗎?");
				// 顯示對話框,並等待按鈕返回
				Optional<ButtonType> buttonType = alert.showAndWait();
				// 判斷返回的按鈕類型是肯定仍是取消,再據此分別進一步處理
				if (buttonType.get().getButtonData().equals(ButtonBar.ButtonData.OK_DONE)) { // 單擊了肯定按鈕OK_DONE
					label.setText("您選擇了「肯定」按鈕。雖然戀戀不捨,可是隻能離開了");
				} else { // 單擊了取消按鈕CANCEL_CLOSE
					label.setText("您選擇了「取消」按鈕。讓我再陪你三百六十五個日夜");
				}
			}
		});
		flowPane.getChildren().add(btn4); // 往流式窗格上添加按鈕

 

運行包含以上代碼的測試程序,單擊按鈕後彈出的對話框以下圖所示,可見確認對話框的提示圖標是個內嵌問號的圓圈。blog


各自單擊確認對話框上的肯定按鈕和取消按鈕,對話框消失後的窗口界面分別以下面兩張圖所示。事件


除了提示對話框這一大類,還有文件對話框FileChooser,它又細分爲文件打開對話框與文件保存對話框兩種,FileChooser的常見方法說明以下:
setTitle:設置文件對話框的標題。
setInitialDirectory:設置文件對話框的初始目錄。
getExtensionFilters:得到文件對話框的擴展過濾器。調用過濾器的add方法或者addAll方法能夠添加新的文件類型過濾器。
showOpenDialog:顯示文件打開對話框。該方法返回一個選中的文件對象。
showOpenMultipleDialog:顯示文件打開對話框,且該對話框支持同時選擇多個文件。該方法返回一個選中的文件清單。
showSaveDialog:顯示文件保存對話框。該方法返回一個待保存的文件對象,文件可能存在也可能不存在。

接着看個文件對話框的運用場景,如今準備打開某張圖片,以便對該圖片進行加工。鑑於圖片文件包含jpg、gif、bmp、png等多種格式,在建立文件類型過濾器時得添加主要的幾種圖片擴展名,下面即是打開圖片的對話框調用代碼例子:

		Button btn1 = new Button("文件打開對話框"); // 建立一個按鈕
		btn1.setOnAction(new EventHandler<ActionEvent>() { // 設置按鈕的單擊事件
			@Override
			public void handle(ActionEvent arg0) { // 處理單擊事件
				FileChooser chooser = new FileChooser(); // 建立一個文件對話框
				chooser.setTitle("打開文件"); // 設置文件對話框的標題
				chooser.setInitialDirectory(new File("E:\\")); // 設置文件對話框的初始目錄
				// 給文件對話框添加多個文件類型的過濾器
				chooser.getExtensionFilters().addAll(
						new FileChooser.ExtensionFilter("全部文件", "*.*"),
						new FileChooser.ExtensionFilter("全部圖片", "*.jpg", "*.gif", "*.bmp", "*.png"));
				// 顯示文件打開對話框,且該對話框支持同時選擇多個文件
				File file = chooser.showOpenDialog(stage); // 顯示文件打開對話框
				if (file == null) { // 文件對象爲空,表示沒有選擇任何文件
					label.setText("未選擇任何文件");
				} else { // 文件對象非空,表示選擇了某個文件
					label.setText("準備打開的文件路徑是:"+file.getAbsolutePath());
				}
			}
		});
		flowPane.getChildren().add(btn1); // 往流式窗格上添加按鈕

 

運行包含以上代碼的測試程序,單擊按鈕後彈出的對話框以下圖所示。


在文件對話框中選擇某個目錄下的某個圖片文件,此時對話框界面以下圖所示。


而後單擊肯定按鈕,回到主程序的窗口界面以下圖所示,可見主程序成功獲取到了該文件的完整路徑。

 

再來驗證文件保存對話框的使用過程,此次指望將一段文字保存到文本文件,那麼具體實現的對話框代碼以下所示:

		Button btn2 = new Button("文件保存對話框"); // 建立一個按鈕
		btn2.setOnAction(new EventHandler<ActionEvent>() { // 設置按鈕的單擊事件
			@Override
			public void handle(ActionEvent arg0) { // 處理單擊事件
				FileChooser chooser = new FileChooser(); // 建立一個文件對話框
				chooser.setTitle("保存文件"); // 設置文件對話框的標題
				chooser.setInitialDirectory(new File("E:\\")); // 設置文件對話框的初始目錄
				// 建立一個文件類型過濾器
				FileChooser.ExtensionFilter filter = new FileChooser.ExtensionFilter("文本文件(*.txt)", "*.txt");
				// 給文件對話框添加文件類型過濾器
				chooser.getExtensionFilters().add(filter);
				File file = chooser.showSaveDialog(stage); // 顯示文件保存對話框
				if (file == null) { // 文件對象爲空,表示沒有選擇任何文件
					label.setText("未選擇任何文件");
				} else { // 文件對象非空,表示選擇了某個文件
					label.setText("準備保存的文件路徑是:"+file.getAbsolutePath());
				}
			}
		});
		flowPane.getChildren().add(btn2); // 往流式窗格上添加按鈕

 

運行包含以上代碼的測試程序,單擊按鈕後彈出的對話框以下圖所示。


在文件對話框中進入到指定目錄,並在對話框下方的文件名一欄填寫待保存的文件名稱,此時對話框界面以下圖所示。


而後單擊肯定按鈕,回到主程序的窗口界面以下圖所示,可見主程序也獲取到了該文件的完整路徑。

 



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

相關文章
相關標籤/搜索