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

JavaFX:如何在初始化过程中从controller获得stage?

轩辕乐邦
2023-03-14

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

((Stage)myPane.getScene().getWindow()).setOn*whatIwant*(...);
Parent root = FXMLLoader.load(getClass().getResource("MyGui.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);

我自己找到的唯一解决办法是在mypane.sceneProperty()中添加一个侦听器,当它不为null时,我得到scene,添加到它的.windowproperty()my!该死的!我最终检索的侦听器处理阶段。这一切都以设置所需的监听器来上演事件而告终。我觉得听众太多了。这是解决我问题的唯一方法吗?

共有1个答案

尉迟鑫鹏
2023-03-14

通过getcontroller()初始化后,可以从fxmlloader获得控制器的实例,但是需要实例化fxmlloader而不是使用静态方法。

我会在调用load()后将阶段直接传递给控制器:

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
 类似资料:
  • 我有个问题. 如何使用我在前面的 StackOverflow 问题中找到的方法初始化 JavaFX 工具包?可以在此处找到该主题:JavaFX 2.1:工具包未初始化 我正在尝试从该线程使用类似于此解决方案的解决方案: 问题:非平凡的Swing GUI应用程序需要运行JavaFX组件。应用程序的启动过程在启动依赖服务层后初始化GUI。 解决方案子类JavaFX应用程序类,并在单独的线程中运行,例如

  • 问题内容: 我试图从一个简单的ArrayList的内容填充ListView。这是我的 Controller.java文件: 这是我的Style.fxml文件: 该程序运行,但是我输入的歌曲没有出现在ListView中(并且Song类确实具有toString方法)。 我能做什么? 问题答案: 问题是没有将控制器的初始化为预期问题的质询者。 Java 8中FXMLLoader的操作有点奇怪。 如果您在

  • 我最近一直在研究Kafka Streams API,但在理解KTables时遇到了一些小麻烦。我想我理解了大致的概念,但我还在为一些细节而苦苦挣扎。 在我的示例应用程序中,我获取一组价格,然后使用Kafka Streaming API将每个产品的平均价格生成到一个压缩的Kafka主题(Topic-A)。我有第二个服务,我想对这些平均价格更新作出反应。因此,在第二个服务中,我在Topic-A上创建,

  • 有一个简单的应用程序,可以获取。我想在应用程序初始化之前获取gps位置。在我看来,GPS位置是异步更新的,我确实会在后台加载应用程序屏幕,同时弹出一个问题:“允许应用程序使用您当前的位置?” 那么,我如何进行回调(抱歉,来自Ruby/JS后台)以等待获得当前位置。 代码: in

  • 问题内容: 我有此控制器类用于在TableView中显示数据库查询,但是我在NullPointerException错误中出现了“ setCellValueFactory(new PropertyValueFactory”) NullPointerExcepetion: 有什么办法吗? 问题答案: 控制器中的实例字段之一缺少注释。由于该字段是私有字段,因此FXML加载程序无法在加载过程中将控件引用

  • 我想创建一个基于JavaFx WebEngine的自定义FunctionPlotter组件。我的情节将在浏览器中显示。在执行plot命令之前,我必须等待浏览器初始化(它加载d3.js)。目前,我这样做的方法是将我的绘图表达式放入一个Runnable中,并将该Runnable传递给FunctionPlotter。(FunctionPlotter将runnable传递给浏览器的loading fini