fxml窗口中关闭窗口事件怎么监听
时间: 2023-07-19 10:34:17 浏览: 226
在JavaFX中,可以使用Stage类的close()方法来关闭窗口。要监听窗口关闭事件,可以使用Stage类的setOnCloseRequest()方法来设置一个事件处理器,当用户点击窗口关闭按钮或者调用Stage类的close()方法时,该处理器会被调用。
以下是一个示例代码,在FXML文件中定义了一个Button元素,当用户点击该按钮时关闭窗口:
FXML文件:
```
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.VBox?>
<VBox xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="com.example.MyController">
<Button text="Close" onAction="#handleCloseButton"/>
</VBox>
```
控制器类:
```
package com.example;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.stage.Stage;
public class MyController {
@FXML
private Button closeButton;
@FXML
private void handleCloseButton(ActionEvent event) {
Stage stage = (Stage) closeButton.getScene().getWindow();
stage.close();
}
public void initialize() {
Stage stage = (Stage) closeButton.getScene().getWindow();
stage.setOnCloseRequest(event -> {
// 处理窗口关闭事件
System.out.println("窗口关闭了");
});
}
}
```
在控制器类的initialize()方法中,首先获取了窗口对象Stage,然后使用setOnCloseRequest()方法设置了一个事件处理器。该事件处理器使用Java 8中的Lambda表达式来定义,当窗口关闭事件发生时会执行Lambda表达式中的代码,输出一条日志信息。
在handleCloseButton()方法中,首先也是获取了窗口对象Stage,然后调用close()方法来关闭窗口。注意,该方法中的参数ActionEvent对象是由FXML框架自动传递的,可以不用管。
阅读全文