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了吧。
-----------------------------------------------------------------------------------