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

来源:https://www.cnblogs.com/pinlantu/archive/2019/08/26/11415444.html
-Advertisement-
Play Games

JavaFX的對話框主要分為提示對話框和文件對話框兩類,其中提示對話框又分作消息對話框、警告對話框、錯誤對話框、確認對話框四種。這四種對話框都使用Alert控制項表達,並通過對話框類型加以區分,例如AlertType.INFORMATION表示消息對話框,AlertType.WARNIN表示警告對話框 ...


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

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

		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("今天白天晴轉多雲,北轉南風2、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); // 往流式窗格上添加按鈕

 

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


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

		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); // 往流式窗格上添加按鈕

 

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

最後是確認對話框,它使用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); // 往流式窗格上添加按鈕

 

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


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


除了提示對話框這一大類,還有文件對話框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開發筆記(序)章節目錄


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Spring 總覽及 IOC 容器的使用 —— Spring 官方文檔解讀(一) 什麼是 Spring? spring 這個詞在不同情況下有不同意義。可以指 Spring 框架本身,但更多地被用來表示 Spring 整個家族的產品。 設計理念 學習框架必須要知道它的設計理念,Spring 框架有著以 ...
  • 一、自己創建: 1.創建maven項目 2.pom.xml添加如下內容: 3.創建springboot項目啟動類: 二、Web下載基礎項目包 1.進入spring官網下載springboot項目包:http://https://start.spring.io/ 2.選擇需要的配置後下載: 3.下載後 ...
  • 基於鎖和線程的併發模型是目前最常用的一種併發模型,但是併發編程模型不僅僅只有這一種,瞭解和熟悉各種併發編程模型,在解決併發問題時會有更多思路。” ...
  • [TOC] Java實現發郵件功能 前言 電子郵件的應用場景非常廣泛,例如新用戶加入,即時發送優惠清單、通過郵件找回密碼、監聽後臺程式,出現異常自動郵件通知等。 本文以網易郵箱為例,通過Java代碼實現發送郵件功能。 開發環境 請參照: "基於SpringBoot構建分模塊項目" 代碼 1. pom ...
  • 轉載註明:https://blog.csdn.net/WantFlyDaCheng/article/details/100078782 一、框架是重點,但別讓人感覺你只會山寨別人的代碼 二、別單純看單機版的框架,適當瞭解些分散式 三、資料庫方面,別就知道增刪改查,得瞭解性能優化 四、Java核心方面 ...
  • 轉載註明:https://blog.csdn.net/WantFlyDaCheng/article/details/100078777 自動代碼 查詢快捷鍵 其他快捷鍵 調試快捷鍵 重構 十大Intellij IDEA快捷鍵 1 智能提示 2 重構 3 代碼生成 4 編輯 5 查找打開 6 其他輔助 ...
  • 單例定義: 一個類只有一個實例,並提供一個全局訪問點。 巧妙利用了編程語言的一些語法規則:構造函數private, 然後提供一個public的方法返回類的一個實例;又方法和返回的類的實例都是static類型,所以只能被類所擁有,而不能被實例化類的對象擁有。這樣一個類就只能有一個實例了。 2. 加”s ...
  • 函數的定義與調用 在Scala中定義函數時,需要定義函數的函數名、參數、函數體。 我們的第一個函數如下所示: def sayHello(name: String, age: Int) = { if (age > 18) { printf("hi %s, you are a big boy\n", n ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...