Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JavaFX:如何在初始化时从控制器获取stage?

JavaFX:如何在初始化时从控制器获取stage?
EN

Stack Overflow用户
提问于 2012-11-06 07:18:36
回答 7查看 159K关注 0票数 97

我想从我的控制器类中处理阶段事件(即隐藏)。所以我要做的就是通过添加一个监听器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
((Stage)myPane.getScene().getWindow()).setOn*whatIwant*(...);

但问题是初始化在初始化后立即开始。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Parent root = FXMLLoader.load(getClass().getResource("MyGui.fxml"));

在此之前

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Scene scene = new Scene(root);
stage.setScene(scene);

因此,.getScene()返回null。

我自己找到的唯一解决办法是向myPane.sceneProperty()添加一个侦听器,当它变为非空时,我得到scene,添加到它的.windowProperty()我的天哪!侦听器处理,我最终检索阶段。这一切都以设置所需的侦听器来上演事件而结束。我觉得听众太多了。这是解决我问题的唯一方法吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-11-06 08:18:22

您可以在通过getController()初始化之后从FXMLLoader获取控制器的实例,但是您需要实例化一个FXMLLoader,而不是使用静态方法。

之后,我会在直接调用load()到控制器之后通过这个阶段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FXMLLoader loader = new FXMLLoader(getClass().getResource("MyGui.fxml"));
Parent root = (Parent)loader.load();
MyController controller = (MyController)loader.getController();
controller.setStageAndSetupListeners(stage); // or what you want to do
票数 123
EN

Stack Overflow用户

发布于 2015-07-28 20:48:08

您所需要做的就是给AnchorPane一个ID,然后您就可以从中获得Stage

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@FXML private AnchorPane ap;
Stage stage = (Stage) ap.getScene().getWindow();

在这里,您可以添加所需的Listener

编辑:正如下面的EarthMind所述,它不一定是AnchorPane元素;它可以是您定义的任何元素。

票数 118
EN

Stack Overflow用户

发布于 2015-06-18 08:19:19

我知道这不是你想要的答案,但我认为提出的解决方案并不好(而你自己的方式是)。为什么?因为它们依赖于应用程序状态。在JavaFX中,控件、场景和舞台彼此不依赖。这意味着控件可以在不添加到场景的情况下存在,场景可以在不附加到舞台的情况下存在。然后,在瞬间t1,控件可以附加到场景,并且在瞬间t2,场景可以被添加到阶段(这就解释了为什么它们是彼此的可观察属性)。

因此,建议获取控制器引用并调用方法,将阶段传递给它的方法会向您的应用程序添加一个状态。这意味着您需要在创建stage之后的适当时刻调用该方法。换句话说,你现在需要遵循一个顺序: 1-创建stage 2-通过一个方法将这个创建的stage传递给控制器。

您不能(或不应该)在此方法中更改此顺序。所以你失去了无国籍状态。而在软件中,一般来说,状态是邪恶的。理想情况下,方法不需要任何调用顺序。

那么什么才是正确的解决方案呢?有两种选择:

1-你的方法,在控制器中侦听属性来获得舞台。我认为这是正确的方法。如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pane.sceneProperty().addListener((observableScene, oldScene, newScene) -> {
    if (oldScene == null && newScene != null) {
        // scene is set for the first time. Now its the time to listen stage changes.
        newScene.windowProperty().addListener((observableWindow, oldWindow, newWindow) -> {
            if (oldWindow == null && newWindow != null) {
                // stage is set. now is the right time to do whatever we need to the stage in the controller.
                ((Stage) newWindow).maximizedProperty().addListener((a, b, c) -> {
                    if (c) {
                        System.out.println("I am maximized!");
                    }
                });
            }
        });
    }
});

2-在创建Stage的地方做你需要做的事情(这不是你想要的):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Stage stage = new Stage();
stage.maximizedProperty().addListener((a, b, c) -> {
            if (c) {
                System.out.println("I am maximized!");
            }
        });
stage.setScene(someScene);
...
票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13246211

复制
相关文章
javaFx 改变stage的标题条的图标
原文来自:http://stackoverflow.com/questions/10275841/how-to-change-the-icon-on-the-title-bar-of-a-stage-in-java-fx-2-0-of-my-applicat/15206407#15206407
明明如月学长
2021/08/27
1.1K0
从ajax获取参数到控制器Laravel
route Route::get('search', 'ShowstaffController@search'); 接收变量
双面人
2020/02/17
1.2K0
JavaFX 简介
本文介绍了JavaFX技术,并基于JavaFX编写了一个简单的图形界面程序。通过使用JavaFX,可以大大简化Java应用程序的开发过程,提高开发效率。同时,JavaFX也提供了一些常用的设计器,如SceneBuilder,可以方便地创建JavaFX应用程序。
乐百川
2018/01/09
5.8K0
JavaFX 简介
swift 获取控制器
得到view的控制器 /** view 获取它的控制器 */ public func viewController()->UIViewController? {
星宇大前端
2019/01/15
1.5K0
如何在JSP中格式化时间
在将后台数据传回前台的时候直接传输date属性的变量不进行格式化就会产生这种情况。 若是使用的是jsp则可以使用专门进行格式化的JSTL标签。 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 因为是国际化标签库所以不止可以进行日期格式化还可以实现国际化等功能,但现在使用他的情况只使用过它的日期格式化功能 <fmt:formateDate>
雪地二货
2018/09/18
1.8K0
JavaFX+Jfoenix 学习笔记(四)–MenuBar菜单栏
菜单最基本的作用就是单击做一些事情这是要用到单击事件:setOnAction(EventHandler<ActionEvent> value)
全栈程序员站长
2022/11/17
2.7K0
JavaFX+Jfoenix 学习笔记(四)–MenuBar菜单栏
Using JavaFX UI Controls 12 Table View
原文链接地址:http://docs.oracle.com/javafx/2/ui_controls/table-view.htm#CJAGAAEE
明明如月学长
2021/08/27
11.4K0
Stage模型和FA模型获取Context的方式
Context模块提供了ability或application的上下文的能力,包括允许访问特定于应用程序的资源、请求和验证权限等。获取context方式如下代码所示:
徐建国
2023/02/23
1K0
Stage模型和FA模型获取Context的方式
JavaFX入门(四):JavaFX布局(一)
说道GUI编程一定要谈到布局,JavaFX内置了大量的布局控件提供给我们使用。其实,JavaFX的布局控件和界面元素控件都是继承自javafx.scene.layout.Region类。我们这里只看布局控件类。布局控件我们在界面上一般是看不到的,它一个容器用于放置其它可视的界面元素控件。(JavaFX在线API文档:JavaFX8 API Online) JavaFX布局控件的类图如下:
卡尔曼和玻尔兹曼谁曼
2019/01/22
11.9K1
JavaFX入门(四):JavaFX布局(一)
JavaFX入门(二):JavaFX和FXML
在我的JavaFXML系列博客第一篇《JavaFX入门(一):我的第一个JavaFX程序 》中我们用纯Java代码写了一个很简单的JavaFXML程序,这一节中我们使用FXML编写程序界面,然后用Java书写后台逻辑完成上一节中的程序,实现相同的功能。
卡尔曼和玻尔兹曼谁曼
2019/01/22
8.8K0
JavaFX入门(二):JavaFX和FXML
[Spark源码剖析] DAGScheduler划分stage划分stage源码剖析
在DAGScheduler内部通过post一个JobSubmitted事件来触发Job的提交
codingforfun
2018/08/24
8260
[Spark源码剖析] DAGScheduler划分stage划分stage源码剖析
如何在windows下和linux下获取文件(如exe文件)的详细信息和属性
最近在项目开发中,由cs开发的exe的程序,需要自动升级,该exe程序放在linux下,自动升级时检测不到该exe程序的版本号信息,但是我们客户端的exe程序需要获取服务器上新程序的版本号信息。最后由我用java实现linux上exe文件的版本号读取功能。下面是详细代码:
业余草
2019/01/21
6K0
如何在windows下和linux下获取文件(如exe文件)的详细信息和属性
Using JavaFX UI Controls 18 超链接
原网页地址:http://docs.oracle.com/javafx/2/ui_controls/hyperlink.htm#CIHGADBG
明明如月学长
2021/08/27
1.5K0
javaFX(二)-使用gradle+jdk14创建javafx程序
在上一篇文章中,我们一起学习了jlink和jdk14的模块化. 在本篇文章中,我们一起来学习gradle来新建一个javafx的Hello World 程序.
微笑的小小刀
2020/05/28
4.3K0
二维码生成小工具,采用javafx框架tornadofx实现界面开发
[3zqf7zy13o.gif] import javafx.application.Application import javafx.beans.property.SimpleObjectProperty import javafx.embed.swing.SwingFXUtils import javafx.scene.image.Image import javafx.scene.image.WritableImage import tornadofx.* import javax.imageio.
用户6167008
2019/09/11
1.5K0
二维码生成小工具,采用javafx框架tornadofx实现界面开发
六种方式,教你在SpringBoot初始化时搞点事情!
在实际工作中经常需要在项目启动时做一些初始化的操作,比如初始化线程池、提前加载好加密证书.......
用户1263954
2021/12/02
8510
六种方式,教你在SpringBoot初始化时搞点事情!
JavaFX之Scene Builder的使用(开发一款GUI小工具原来这么简单)
首先声明一下,Java的强项并不在GUI上,现在是web的天下,博主发此篇文章仅是个人兴趣,如果您是学Java开发的,业余想做GUI小工具,可以选择使用JavaFX。如果需要开发企业级应用,推荐还是用qt或者wpf那些,用Electron也是很好的选择。
VIBE
2022/11/22
11.5K0
JavaFX之Scene Builder的使用(开发一款GUI小工具原来这么简单)
JavaFx-Button
.button1 { -fx-font: 22 arial; -fx-base: #b6e7c9; }
shengjk1
2021/03/02
4.9K0
JavaFx-Button
躁!DJ 风格 Java 桌面音乐播放器
HelloGitHub 推出的《讲解开源项目》系列,今天给大家带来一款开源 Java 版桌面 DJ 音乐播放器项目——XR3Player,它强大的功能和炫酷的展示效果,你肯定会喜欢上它的!
HelloGitHub
2021/05/14
3.8K0
点击加载更多

相似问题

如何从控制器访问JavaFx Stage?

20

如何在JavaFX中获取stage的关闭事件?

32

无法初始化类javafx.stage.screen

10

JavaFX FileChooser.showOptionDialog( Stage )从其他类获取舞台

10

如何使JavaFX stage透明(仅限Stage)

134
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文