在JavaFX的官方API中,是沒有對話框相關的類。所以我們在需要使用對話框的時候,可以使用Swing的庫。但是由於風格相差較大,更多的時候我們需要用JavaFX來創建對話框。
下面我們來看看怎麼用JavaFX來創建一個對話框吧。
JavaFX用於創建對話框的類是Stage,沒錯。JavaFX程序的起始界面也是一個Stage。
我們先用JavaFX Scene Builder來創建一個佈局文件。
如圖所示,是一個簡單的提示框佈局,命名爲AlertDialog.fxml。
然後修改XML文件如下圖所示:
根部用fx:root標籤,然後指定根部的類型爲javafx.scene.layout.AnchorPane,注意,這裏要跟後面代碼裏相對應。然後把之前的佈局文件用<children>標籤包含起來。
下面是我們事件代碼:
- import java.io.IOException;
- import javafx.event.ActionEvent;
- import javafx.fxml.FXML;
- import javafx.fxml.FXMLLoader;
- import javafx.scene.Scene;
- import javafx.scene.control.Label;
- import javafx.scene.control.TitledPane;
- import javafx.scene.layout.AnchorPane;
- import javafx.stage.Stage;
- import javafx.stage.StageStyle;
- /**
- *
- * @author Wing
- */
- public class WiAlertDialog extends AnchorPane{
- @FXML
- Label alertMessage;
- @FXML
- TitledPane alertTitledPane;
- private static WiAlertDialog wiAlertDialog;
- private static Stage newAlertDialog ;
- private WiAlertDialog(String message) {
- FXMLLoader fXMLLoader = new FXMLLoader(getClass().getResource("AlertDialog.fxml"));
- fXMLLoader.setRoot(WiAlertDialog.this);
- fXMLLoader.setController(WiAlertDialog.this);
- try {
- fXMLLoader.load();
- } catch (IOException exception) {
- throw new RuntimeException(exception);
- }
- alertTitledPane.setFocusTraversable(false);
- alertMessage.setText(message);
- }
- public static void showAlertDialog(String message) {
- newAlertDialog = new Stage(StageStyle.TRANSPARENT);
- newAlertDialog.setResizable(false);
- wiAlertDialog = new WiAlertDialog(message);
- newAlertDialog.setScene(new Scene(wiAlertDialog));
- newAlertDialog.show();
- }
- public static void hideAlertDialog() {
- if(newAlertDialog != null) {
- newAlertDialog.hide();
- }
- }
- @FXML
- private void onAlertOKClick(ActionEvent event) {
- WiAlertDialog.hideAlertDialog();
- }
- }
我們先用FXMLLoader來載入FXML文件,然後設置根元素爲當前,也就是AnchorPane。接着設置Controller爲當前,也就是在FXML中指定的事件,我們可以在這裏實現(例如後面的onAlertOKClick事件)。
然後我們用一個靜態的showAlertDialog來顯示對話框。
在showAlertDialog中,我們創建一個Stage,和一個包含當前界面的Scene。通過Stage.show來顯示對話框,然後點擊"確定"按鈕後,執行onAlertOKClick來將Stage關閉。
下面我們來看看效果:
上下兩個對話框均是這樣實現的。
大家可以在JavaFX開發中嘗試一下