我想让我的JavaFX窗口可拖动。为了做到这一点,我创建了一个类,为每个场景创建 MouseListener 来处理拖动:
public static void setDragListener(){
root.setOnMousePressed(event -> {
xOffset = event.getSceneX();
yOffset = event.getSceneY();
});
root.setOnMouseDragged(event -> {
stage.setX(event.getScreenX() - xOffset);
stage.setY(event.getScreenY() - yOffset);
});
}
所以,当我进入一个新窗口时,我会更改当前场景的根目录并创建新的 MouseListeners :
void goTo(String path, ActionEvent actionEvent){
try {
Parent parent = FXMLLoader.load(getClass().getResource(path));
Scene scene = new Scene(parent);
WindowDrag.setRoot(parent);
WindowDrag.setDragListener();
Stage window = (Stage)((Node)actionEvent.getSource()).getScene().getWindow();
window.setScene(scene);
window.show();
} catch (IOException e) {
e.getMessage();
}
}
我担心的是离开之前的听众。是否可以通过在场景之间切换来耗尽内存?