从FXMLController调用的java锁定模式窗口
我有一个JavaFXGUI,允许用户扫描。 这个过程需要一段时间。因此,用户既不应该一直点击,也不应该认为程序挂起了
我的解决方案是一个模式窗口,它就在整个GUI的前面,当一切完成时,它会自动消失
该接口由FXML控制器、FXML文件和MainApp组成
到目前为止,我在控制器中调用它:
Stage stage = Messages.beforeScan(event);
s.scan(filename);
stage.close();
beforeScan
-方法看起来像这样(取自How to create a modal window in JavaFX 2.1):
public static Stage beforeScan(Event event) {
Stage stage = new Stage();
try {
Parent root = FXMLLoader.load(
FXMLController.class.getResource("/fxml/Scene.fxml"));
stage.setScene(new Scene(root));
stage.setTitle("My modal window");
stage.initModality(Modality.WINDOW_MODAL);
stage.initOwner(((Node)event.getSource()).getScene().getWindow());
stage.show();
} catch (IOException ex) {
Logger.getLogger(Meldungen.class.getName()).log(Level.SEVERE, null, ex);
}
return stage;
}
但这并不成功。如果我注释掉stage.close();
,我仍然可以使用我的主GUI。
因此,另一种方法是:
我没有从控制器导入场景,而是从MainApp类获取场景:
public static Stage beforeScan(Event event) {
Stage stage = new Stage();
stage.setScene(MainApp.getStage.getScene());
stage.setTitle("My modal window");
stage.initModality(Modality.WINDOW_MODAL);
stage.initOwner(((Node) event.getSource()).getScene().getWindow());
stage.show();
return stage;
}
但这只是用一个StackOverflow
来破坏一切。
弹出窗口(取自示例here)也没有帮助。它甚至只在扫描后才打开
使用警报似乎是个好主意,但这样做不仅会锁定屏幕,还会锁定程序本身:
public Alert beforeScan(Event event) {
javafx.scene.control.Alert alert = new Alert(Alert.AlertType.NONE, "Scan in progress");
alert.showAndWait();
return alert;
}
如何正确完成屏幕锁定模式窗口/弹出窗口
共 (0) 个答案