锁定从FXMLController调用的模态窗口

时间:2017-06-16 21:50:26

标签: java javafx modal-dialog

我有一个允许用户扫描的JavaFX-GUI。 这个过程需要一段时间。因此,用户既不应该继续点击,也不应该认为程序自行挂起。

我的解决方案是一个模态窗口,它位于整个GUI的前面,并在一切都完成后消失。

界面由FXML-Controller,FXML-File和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-Class获取它:

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 个答案:

没有答案