1. 程式人生 > >JavaFX之對話方塊的建立

JavaFX之對話方塊的建立

  在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開發中嘗試一下。

-----------------------------------------------------------------------------------

  有1,2個月沒有寫部落格了。其實專案的事情並不算多,主要是Unity3D專案,美工的製作時間比較長。所以搗鼓了一段時間的JavaFX開發。在做一個多執行緒下載斷點續傳的下載工具。只當是熟悉一下。不過也覺得沒得意思了,還是想從事遊戲開發相關的內容。這個部分寫幾篇部落格,可能又去繼續玩Cocos2d-x了吧。

-----------------------------------------------------------------------------------