在圖形化介面環境中,對話盒因功能之不同可分為:
- 訊息對話盒 (Message Box)。
- 開啟檔案對話盒 (Open File Dialog)。
- 儲存檔案對話盒 (Save File Dialog)。
- 色彩對話盒 (Color Dialog)。
- 版面設定對話盒 (Page Setup Dialog)。
- 預覽列印對話盒 (Print Preview Dialog)。
- 列印對話盒 (Print Dialog)。
- 字型對話盒 (Font Dialog)。
- 尋找對話盒 (Find Dialog)。
- 對話盒:javax.swing.JDialog。
- 對話框:javax.swing.JOptionPane。
- 檔案對話盒:javax.swing.JFileChooser。
- 色彩對話盒:javax.swing.JColorChooser。
- 確認對話盒 (Confirm Dialog):以showConfirmDialog()方法顯示,預設包括Yes、No與Cancel按鈕。
- 輸入對話盒 (Input Dialog):用以取得資訊,並以showInputDialog()方法顯示。
- 訊息對話盒 (Message Dialog):用以顯示資訊,並以showMessageDialog()方法顯示。
- 選項對話盒 (Option Dialog):可自訂對話盒及按鈕樣式,並以showOptionDialog()方法顯示。
- 目錄對話盒:javafx.stage.DirectoryChooser。
- 檔案對話盒:javafx.stage.FileChooser。
- 快顯對話盒:javafx.stage.Popup。
- 顏色選擇器:javafx.scene.control.ColorPicker。
- 日期選擇器:javafx.scene.control.DatePicker。
JavaFX 8 Update 40新增之對話盒沿用自ControlsFX,其類別為javafx.scene.control.Alert,繼承自javafx.scene.control.Dialog類別,因此除了可使用Alert類別的相關方法建立對話盒之外,亦可以Dialog類別自訂對話盒。除了Alert類別之外,另外尚有ChoiceDialog與TextInputDialog類別。
Alert類別的方法包括:
- getButtonTypes():取得對話盒的按鈕類型。
- getContentText():取得對話盒的內容文字。
- setContentText():設定對話盒的內容文字。
- getDialogPane():取得對話盒的窗格。
- setDialogPane():設定對話盒的窗格。
- getGraphic():取得對話盒中的圖示。
- setGraphic():設定對話盒中的圖示。
- getHeaderText():取得標題文字,Java Swing並沒有此部份。
- setHeaderText():設定標題文字,Java Swing並沒有此部份。
- getTitle():取得對話盒標題。
- setTitle():設定對話盒標題。
- show():顯示對話盒。
- wait():等待使用者回應,則按下對話盒中的任一按鈕。
- showAndWait():顯示對話盒並等待使用者回應。
- AlertType.INFORMATION:訊息對話盒。
- AlertType.WARNING:警告對話盒。
- AlertType.ERROR:錯誤對話盒。
- AlertType.CONFIRMATION:確認對話盒。
- AlertType.NONE:無任何預設設定。
Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle("Information Dialog"); alert.setHeaderText(null); alert.setContentText("訊息對話盒,顯示一般訊息之用。"); alert.showAndWait(); ...【執行結果】
以下範例以Alert類別的相關方法設定訊息對話盒,並加入setHeaderText()方法設定標題文字:
Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle("Information Dialog"); alert.setHeaderText("示範以setHeaderText()方法設定標題文字。"); alert.setContentText("訊息對話盒,顯示一般訊息之用。"); alert.showAndWait(); ...【執行結果】
Alert alert = new Alert(AlertType.WARNING); alert.setTitle("Warning Dialog"); alert.setHeaderText(null); alert.setContentText("警告對話盒,顯示警告訊息之用。"); alert.showAndWait(); ...【執行結果】
以下範例以Alert類別的相關方法設定警告對話盒,並加入setHeaderText()方法設定標題文字:
Alert alert = new Alert(AlertType.WARNING); alert.setTitle("Warning Dialog"); alert.setHeaderText("示範以setHeaderText()方法設定標題文字。"); alert.setContentText("警告對話盒,顯示警告訊息之用。"); alert.showAndWait(); ...【執行結果】
Alert alert = new Alert(AlertType.ERROR); alert.setTitle("Error Dialog"); alert.setHeaderText(null); alert.setContentText("錯誤對話盒,顯示錯誤訊息之用。"); alert.showAndWait(); ...【執行結果】
以下範例以Alert類別的相關方法設定錯誤對話盒,並加入setHeaderText()方法設定標題文字:
Alert alert = new Alert(AlertType.ERROR); alert.setTitle("Error Dialog"); alert.setHeaderText("示範以setHeaderText()方法設定標題文字。"); alert.setContentText("錯誤對話盒,顯示錯誤訊息之用。"); alert.showAndWait(); ...【執行結果】
Alert alert = new Alert(AlertType.CONFIRMATION); alert.setTitle("Confirmation Dialog"); alert.setHeaderText(null); alert.setContentText("確認對話盒,用以確認訊息,並包括確認與取消按鈕。"); alert.showAndWait(); ...【執行結果】
以下範例以Alert類別的相關方法設定確認對話盒,並加入setHeaderText()方法設定標題文字:
Alert alert = new Alert(AlertType.CONFIRMATION); alert.setTitle("Confirmation Dialog"); alert.setHeaderText("示範以setHeaderText()方法設定標題文字。"); alert.setContentText("確認對話盒,用以確認訊息,並包括確認與取消按鈕。"); alert.showAndWait(); ...【執行結果】
Alert alert = new Alert(AlertType.CONFIRMATION); alert.setTitle("Confirmation Dialog"); alert.setHeaderText(null); alert.setContentText("確認對話盒,用以確認訊息,並包括確認與取消按鈕。"); // 設定對話盒中的圖示 alert.setGraphic(new ImageView( new Image(getClass().getResourceAsStream("images/Question.png")))); alert.showAndWait(); ...【執行結果】
由於確認對話盒預設包括確認與取消按鈕,可使用以下方式取得所按下的按鈕:
Optional<buttontype> result = alert.showAndWait(); if (result.get() == ButtonType.OK) { System.out.println("Press OK button."); } else { System.out.println("Press cancel button."); } ...可更進一步使用Lambda Expression精簡程式:
alert.showAndWait().ifPresent(result -> { if (result == ButtonType.OK) { System.out.println("Press OK button."); } else { System.out.println("Press cancel button."); } }); ...除了預設按鈕之外,可使用ButtonType類別自訂按鈕類型組合,並以ButtonData.CANCEL_CLOSE設定自訂按鈕中的預設Cancel按鈕,當按下ESC按鍵時,等同按下Cancel按鈕:
// 自訂按鈕類型 ButtonType button1 = new ButtonType("Yes"); ButtonType button2 = new ButtonType("No"); ButtonType button3 = new ButtonType("Maybe"); // 設定預設Cancel按鈕 ButtonType button4 = new ButtonType("Cancel", ButtonData.CANCEL_CLOSE); alert.getButtonTypes().setAll(button1, button2, button3, button4); alert.showAndWait().ifPresent(result -> { if (result == button1) { System.out.println("Press Yes button."); } else if (result == button2) { System.out.println("Press No button."); } else if (result == button3) { System.out.println("Press Maybe button."); } else { System.out.println("Press Cancel button."); } }); ...【執行結果】
【參考資料】
[1] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[2] JavaFX:http://www.oracle.com/technetwork/java/javafx
[3] JavaFX 8.0 API Specification.
[4] Java Platform, Standard Edition 8 API Specification.
© Chia-Hui Huang
如何实现对Dialog content的复制
回覆刪除