以下範例示範以TextInputDialog建立文字欄位之對話盒,較之前以getDialogPane()的setContent()或setExpandableContent()方法將自訂物件置於對話盒的方式為簡單:
TextInputDialog dialog = new TextInputDialog(); dialog.setTitle("Text Input Dialog"); dialog.setHeaderText(null); dialog.setContentText("Username:"); dialog.showAndWait().ifPresent(result -> { System.out.println("Username: " + result); }); ...【執行結果】
以下範例並加入setHeaderText()方法設定標題文字:
TextInputDialog dialog = new TextInputDialog(); dialog.setTitle("Text Input Dialog"); dialog.setHeaderText("示範以setHeaderText()方法設定標題文字。"); dialog.setContentText("Username:"); dialog.showAndWait().ifPresent(result -> { System.out.println("Username: " + result); }); ...【執行結果】
以下範例示範以ChoiceDialog建立選項方塊之對話盒,並示範將作業系統的所有字型置於選項方塊之中:
// 取得作業系統的所有字型 List<String> fonts = Font.getFamilies(); // 以字型建立選項方塊對話盒 ChoiceDialog<String> dialog = new ChoiceDialog<>(fonts.get(0), fonts); dialog.setTitle("Choice Dialog"); dialog.setHeaderText(null); dialog.setContentText("Fonts:"); dialog.showAndWait().ifPresent(result -> { System.out.println("Font: " + result); }); ...【執行結果】
Dialog<Pair<String, String>> dialog = new Dialog<>(); dialog.setTitle("Custom Dialog"); dialog.setHeaderText(null); dialog.setGraphic(new ImageView( new Image(getClass().getResourceAsStream("images/info.png")))); // 自訂按鈕類型組合 ButtonType button1 = new ButtonType("OK", ButtonData.OK_DONE); ButtonType button2 = new ButtonType("Cancel", ButtonData.CANCEL_CLOSE); dialog.getDialogPane().getButtonTypes().addAll(button1, button2); Label label1 = new Label("Username:"); Label label2 = new Label("Password:"); final TextField textfield = new TextField(); textfield.setText(""); textfield.setTooltip(new Tooltip("Username")); final PasswordField passwordfield = new PasswordField(); passwordfield.setText("Athena"); passwordfield.setPrefColumnCount(15); passwordfield.setPromptText("Please enter your password."); passwordfield.setTooltip(new Tooltip("Password")); GridPane gridpane = new GridPane(); gridpane.setAlignment(Pos.CENTER); gridpane.setHgap(10); gridpane.setVgap(10); gridpane.setPadding(new Insets(5, 5, 5, 5)); gridpane.add(label1, 0, 0); gridpane.add(label2, 0, 1); gridpane.add(textfield, 1, 0); gridpane.add(passwordfield, 1, 1); Button btnOK = (Button) dialog.getDialogPane().lookupButton(button1); btnOK.setDisable(true); textfield.textProperty().addListener( (observable, oldValue, newValue) -> { btnOK.setDisable(newValue.trim().isEmpty()); }); // 將自訂物件置於對話盒中 dialog.getDialogPane().setContent(gridpane); dialog.setResultConverter(buttontype -> { if (buttontype == button1) { return new Pair<>(textfield.getText(), passwordfield.getText()); } return null; }); dialog.showAndWait().ifPresent(result -> { System.out.println("Username: " + result.getKey()); System.out.println("Password: " + result.getValue()); }); ...【執行結果】
[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
請教一個讓小弟疑惑許久的問題:
回覆刪除Java Swing可以new出新視窗,但是…JavaFX不是用new的吧?
官方有一個登入的dialog視窗,可是沒有登入後的視窗呢…
請參考以下文章
刪除http://leohkkimo.blogspot.tw/2014/11/javafx.html