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

JavaFX 2.0:关闭一个阶段(窗口)

岳正阳
2023-03-14

我正在JavaFX 2.0中制作一个应用程序。从我的主窗口开始一个带有一些设置的新窗口。调整完设置后,我想按一个像“保存更改”这样的按钮。

我想用这个按钮保存更改并关闭窗口。我所说的关闭意味着杀死它,而不是把它放在背景中或设置可见性。我读过关于方法阶段的书。关闭()

http://docs.oracle.com/javafx/2.0/api/javafx/stage/Stage.html

正如您所见,它类似于Hide()方法,它只隐藏窗口,而不关闭窗口。

问:有人知道任何方法或有一些代码可以帮助我关闭窗口吗?

所有的帮助将不胜感激。谢谢!

共有3个答案

阮昊阳
2023-03-14

如果用户也对关闭窗口事件感兴趣,请在窗口中添加一个事件过滤器:(当用户按下应用程序的OS close按钮时,也会触发此事件)

    yourWindow.addEventFilter(WindowEvent.WINDOW_CLOSE_REQUEST, event -> {
        // add your code here to handle the close event
        // use event.consume(); to prevent the application from closing
    });

如果需要使用自定义关闭按钮关闭应用程序,则在按钮的onAction方法中触发事件:

 yourWindow.fireEvent(new WindowEvent(window, WindowEvent.WINDOW_CLOSE_REQUEST));
林辰钊
2023-03-14

这对我来说非常有效(通过导入节点):

((Node)(event.getSource())).getScene().getWindow().hide();
于高雅
2023-03-14

您链接的留档声明stage.close()

关闭此阶段。这个调用相当于hide()。

由于hide()相当于close()close()关闭舞台,那么hide()也会关闭舞台。

当应用程序中的所有阶段都被隐藏(或者关闭,如果你愿意的话,因为它是同一个东西),应用程序就会退出。令人困惑,我知道,但这正是JavaFX团队决定命名和实现这些操作的方式。

如果需要,请打开平台。html" target="_blank">setImplicitExit(布尔)方法可用于关闭关闭或隐藏最后一个窗口时退出应用程序的默认行为。

接下来的问题是,我们如何在不完全关闭舞台的情况下隐藏舞台?

我认为hide()或等效的close()方法不会像释放与窗口相关的所有资源那样“完全”关闭该阶段(只要你在某个地方保留对该阶段的引用)。我认为它只是让舞台不可见。您可能可以在调用close()之后调用show(),窗口可能会再次可见(我没有尝试)。不过,如果要这样做,那么调用hide()比调用close()更直观。

我的猜测是,如果您不再保留对应用程序中某个阶段的任何引用,并且该阶段是关闭或隐藏的,那么当JVM的算法决定垃圾收集这些资源时,它可能会释放与该阶段相关的所有资源(同样,我没有测试这个,它可能不会以这种方式工作)。

 类似资料:
  • 因此,我有一个JavaFX2.0应用程序,主窗口在启动时显示。我想做的是让用户按下一个按钮,然后在主窗口旁边弹出另一个窗口。 所以,我想在主舞台左侧“固定”一个未装饰的舞台。 我知道如何制作窗口,以及如何使其不被装饰,新窗口工作正常,我只想使其在移动窗口时相对于主窗口(或舞台,无论您喜欢称之为哪个)保持相同的位置。

  • 在一个类中,在一个函数中,我创建了一个Tkinter画布。这个函数正在被另一个类调用,我希望Tkinter窗口弹出30秒,然后自动关闭。我有电话 但我犯了个错误 elf.tk.call('destroy',self.w)\u tkinter.TclError:无法调用“destroy”命令:应用程序已被销毁 那我怎么能让它自己关上呢?

  • 问题内容: 我想在关闭JavaFX应用程序之前保存文件。 这就是我在中设置处理程序的方式: 当按下按钮时,控制器将调用: 如果关闭窗口,请单击窗口边框上的红色X(正常方式),然后会收到输出消息“ ”,这是所需的行为。 但是,在调用应用程序时,它会在不调用处理程序的情况下关闭(没有输出)。 如何使控制器使用添加到的处理程序? 问题答案: 如果你看一下在生命周期中的类: 每当启动应用程序时,JavaF

  • 我想在关闭JavaFX应用程序之前保存一个文件。 这就是我在中设置处理程序的方法: 以及当按下按钮时调用的控制器: 如何使控制器使用我添加到中的处理程序?

  • 我需要通过单击从内部关闭。 我有一个主类,从中我创建了一个场景的主舞台。我使用FXML来实现这一点。 现在在出现的主窗口中,我有所有的控制项和菜单以及通过FXML和适当的控制类制作的东西。这就是我决定在帮助菜单中包含关于信息的部分。所以当菜单帮助-关于被激活时,我有一个事件正在发生,像这样: 正如所见,关于框窗口是通过带有控制器的FXML创建的。我想添加一个从控制器内关闭新阶段。 我发现自己能够做

  • 问题内容: 当我使用WebEngine创建播放YouTube视频的新舞台时,关闭它之后-Youtube继续在backgroung上播放。如果我使用“ Platform.exit”-它会关闭我的所有JavaFX App,但我只想关闭为YouTube创建的阶段。 这是我针对YouTube播放器的课程: 在“主舞台”中单击按钮后,我的YouTube播放器舞台正在创建: 问题答案: 您无法处置WebEng