使用场景生成器在 window 上设置关闭请求方法
Set on Close Request method on a window using Scene builder
因为我不能使用场景构建器来设置这个方法
我正在尝试获取现在显示的场景的Window并设置方法
public class MainController {
@FXML
private Button Settings;
public void initialize() {
Window w =Settings.getScene().getWindow();
w.setOnCloseRequest(ac->{
System.out.println("Done");
});
}
}
然后我注意到 w = null ...和 get Scene 方法 returns null 也是..
所以 1) 有什么方法可以在不使用(初始化方式)的情况下使用 Scene builder 来实现
2) 我怎样才能修复上面的代码,这样我就可以使用 window ?
不要在 initialize 方法中使用 getScene() ,因为您将得到 null。调用controller的initialize方法时,根元素还没有放到场景中
试试这个:
ChangeListener<Window> windowListener = new ChangeListener<>() {
@Override
public void changed(ObservableValue obs, Window oldVal, Window newVal) {
if (newVal != null) {
setting.getScene().getWindow().setOnCloseRequest(eh -> System.out.println("Done"));
setting.getScene().windowProperty().removeListener(this);
}
}
};
ChangeListener<Scene> sceneListener = new ChangeListener<>() {
@Override
public void changed(ObservableValue obs, Scene oldVal, Scene newVal) {
if (newVal != null) {
newVal.windowProperty().addListener(windowListener);
setting.sceneProperty().removeListener(this);
}
}
};
setting.sceneProperty().addListener(sceneListener);
为了避免未使用的侦听器,我在设置setOnCloseRequest后添加了侦听器移除。
因为我不能使用场景构建器来设置这个方法
我正在尝试获取现在显示的场景的Window并设置方法
public class MainController {
@FXML
private Button Settings;
public void initialize() {
Window w =Settings.getScene().getWindow();
w.setOnCloseRequest(ac->{
System.out.println("Done");
});
}
}
然后我注意到 w = null ...和 get Scene 方法 returns null 也是..
所以 1) 有什么方法可以在不使用(初始化方式)的情况下使用 Scene builder 来实现 2) 我怎样才能修复上面的代码,这样我就可以使用 window ?
不要在 initialize 方法中使用 getScene() ,因为您将得到 null。调用controller的initialize方法时,根元素还没有放到场景中
试试这个:
ChangeListener<Window> windowListener = new ChangeListener<>() {
@Override
public void changed(ObservableValue obs, Window oldVal, Window newVal) {
if (newVal != null) {
setting.getScene().getWindow().setOnCloseRequest(eh -> System.out.println("Done"));
setting.getScene().windowProperty().removeListener(this);
}
}
};
ChangeListener<Scene> sceneListener = new ChangeListener<>() {
@Override
public void changed(ObservableValue obs, Scene oldVal, Scene newVal) {
if (newVal != null) {
newVal.windowProperty().addListener(windowListener);
setting.sceneProperty().removeListener(this);
}
}
};
setting.sceneProperty().addListener(sceneListener);
为了避免未使用的侦听器,我在设置setOnCloseRequest后添加了侦听器移除。