javaFX 在Controller中获取Stage

如果你想以Controller架构写javaFX的话, 有一个需求是按ESC键退出程序, 那么你需要在Controller中获取到Stage从而关闭程序

思路:
1. 根据id取到布局中的根元素, (使用fx:id获取 )
2. 通过根元素取得Stage

代码:

fxml:

<VBox fx:id="rootLayout" prefHeight="300.0" prefWidth="450.0" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<children>
        <TextArea fx:id="detail" onKeyPressed="#translateStart" prefHeight="100.0" prefWidth="450.0" text="" wrapText="true">
            <font>
                <Font name="consolas" size="13.0" />
            font>
        TextArea>
    children>

VBox>

controller:

public class Controller implements EventHandler {
    @FXML
    private TextArea detail;
    @FXML
    private VBox rootLayout;

    //这里是监听键盘按下的事件方法
    @FXML
    public void translateStart(KeyEvent event) {
        handle(event);
    }

    //这里是判断如果按下ESC就直接退出
    @Override
    public void handle(KeyEvent event) {
        if (event.getCode() == KeyCode.ESCAPE) {
            //这里是取到Stage的具体代码
            Stage stage = (Stage) rootLayout.getScene().getWindow();
            stage.close();
        }
    }
}

其他不相关的代码我就不写了, 大家随意看看就好

参考博文: JavaFx在同一个Scence/Window加载新的fxml,以及在Controller中获取Stage

你可能感兴趣的:(JavaFX,JavaFX,Controller,Stage)