有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从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) 个答案