当前位置: 首页 > 知识库问答 >
问题:

从其控制器中关闭阶段

司徒英卓
2023-03-14

我需要通过单击按钮从内部关闭阶段

我有一个主类,从中我创建了一个场景的主舞台。我使用FXML来实现这一点。

public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("Builder.fxml"));
    stage.setTitle("Ring of Power - Builder");
    stage.setScene(new Scene(root));
    stage.setMinHeight(600.0);
    stage.setMinWidth(800.0);
    stage.setHeight(600);
    stage.setWidth(800);
    stage.centerOnScreen();
    stage.show();
}

现在在出现的主窗口中,我有所有的控制项和菜单以及通过FXML和适当的控制类制作的东西。这就是我决定在帮助菜单中包含关于信息的部分。所以当菜单帮助-关于被激活时,我有一个事件正在发生,像这样:

@FXML
private void menuHelpAbout(ActionEvent event) throws IOException{
    Parent root2 = FXMLLoader.load(getClass().getResource("AboutBox.fxml"));
    Stage aboutBox=new Stage();
    aboutBox.setScene(new Scene(root2));
    aboutBox.centerOnScreen();
    aboutBox.setTitle("About Box");
    aboutBox.setResizable(false);
    aboutBox.initModality(Modality.APPLICATION_MODAL); 
    aboutBox.show();
}

正如所见,关于框窗口是通过带有控制器的FXML创建的。我想添加一个按钮从控制器内关闭新阶段。

我发现自己能够做到这一点的唯一方法是定义一个关于盒子的公共静态阶段;在建筑商里面。java类,并从AboutBox中引用该类。java in方法,用于处理关闭按钮上的操作事件。但不知何故,它感觉并不完全干净和正确。还有更好的办法吗?

共有2个答案

谢鸿飞
2023-03-14

在JavaFX 2.1中,您只有很少的选择。就像在jeWelSea的回答中,或者你已经做过的或者修改过的版本一样

public class AboutBox extends Stage {

    public AboutBox() throws Exception {
        initModality(Modality.APPLICATION_MODAL);
        Button btn = new Button("Close");
        btn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent arg0) {
                close();
            }
        });

        // Load content via
        // EITHER

        Parent root = FXMLLoader.load(getClass().getResource("AboutPage.fxml"));
        setScene(new Scene(VBoxBuilder.create().children(root, btn).build()));

        // OR

        Scene aboutScene = new Scene(VBoxBuilder.create().children(new Text("About me"), btn).alignment(Pos.CENTER).padding(new Insets(10)).build());
        setScene(aboutScene);

        // If your about page is not so complex. no need FXML so its Controller class too.
    }
}

用法如

new AboutBox().show();

在菜单项操作事件处理程序中。

贺玉石
2023-03-14

您可以从传递给事件处理程序的事件中派生要关闭的阶段。

new EventHandler<ActionEvent>() {
  @Override public void handle(ActionEvent actionEvent) {
    // take some action
    ...
    // close the dialog.
    Node  source = (Node)  actionEvent.getSource(); 
    Stage stage  = (Stage) source.getScene().getWindow();
    stage.close();
  }
}
 类似资料:
  • null 我在TopMenuButtons中有一个按钮,它具有openAssisstantStage()方法,打开新的小阶段: 对于这个阶段,我还有FXML文件和控制器(AssisstantController)。只有2个按钮-第一个按钮应该打开前一个阶段和关闭电流,但第二个按钮也应该打开普雷沃阶段,关闭电流,也打开一个特定的标签在我的标签视图和做一些其他逻辑例如。获取实际localDate: 我

  • 问题内容: 我有一个模式窗口,用于向用户展示表单。他们输入信息,然后按ng键。服务器处理该请求并发送回响应。响应成功后,我想从控制器关闭模式窗口。如何做到这一点? 模态是另一页中的一部分 主页: 该指令的内容: 模态标记: 控制器代码: 在成功和错误功能中,从控制器关闭模态的正确方法是什么? 提前致谢, 问题答案: 您是否看过angular-ui引导程序?有一个Dialog(ui.bootstra

  • 我怎么绕过这个?我需要以某种方式再次实现那个方法,但突然间我不能通过作为一个论点的阶段。

  • 问题内容: 我正在使用SpriteKit制作游戏。我有3个viewControllers:选择级别vc,游戏vc和win vc。游戏结束后,我想显示Win vc,然后如果我按Win vc上的“确定”按钮,我想关闭Win vc和游戏vc(将两个视图控制器弹出堆栈)。但我不知道该怎么办,因为如果我打电话 Win vc(堆栈顶部)被关闭了,所以我不知道在哪里再次调用它来关闭游戏vc。有什么方法可以在不使

  • 问题内容: 因此,我有一个带有按钮的根视图控制器,当用户按下该按钮时,将显示另一个视图控制器。第二个控制器具有一个关闭选项,该选项仅返回到根视图控制器,还有一个按钮,当用户触摸它时,该按钮将关闭当前视图控制器,以便它再次返回到根视图控制器并显示另一个按钮。转到我使用的第一个控制器: 在另一个视图控制器中,我选择仅关闭的按钮,然后执行此操作。 因此,对于需要解雇并显示另一个控制器的第二个控制器,我尝

  • 问题内容: 我已按照此处的说明进行操作,但仍不确定这部分内容: 我曾尝试以编程方式实例化视图控制器,但仍然无济于事。 这是我退出模态视图控制器时的代码: 我正在使用情节提要通过模式视图进行筛选。 这是我希望传输回父视图控制器的数据: 这是两个字符串值。 编辑: 我试图从模态视图控制器传递数据,如下所示: 而在父视图控制器上,我这样做的是: 当我按下打印按钮时,我仍然无法获得任何价值。 模态视图控制