首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有* FXML的JavaFX 2.2模式窗口对话框*

带有* FXML的JavaFX 2.2模式窗口对话框*
EN

Stack Overflow用户
提问于 2012-09-22 08:48:49
回答 1查看 12.3K关注 0票数 4

我正在尝试使用@珠海at this gist提供的示例,但我遇到了问题,因为我使用的是FXML。

我看过这两篇文章:How to create a modal window in JavaFX 2.1this answer to JavaFX 2 modal window

我被困在由珠海编写的代码中,它说:

代码语言:javascript
复制
final WebView webView = new WebView(); 
webView.getEngine().load("http://docs.oracle.com/javafx/");
primaryStage.setScene(new Scene(webView));

然而,由于我使用的是FXML,所以我这样做:

代码语言:javascript
复制
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("MyFXML.fxml"));
Scene scene = (Scene)fxmlLoader.load();
myController = fxmlLoader.getController();
primaryStage.setScene(scene);

你能告诉我如何修改我的代码(上面的4行),这样它就可以和珠海的例子一起工作了吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-22 10:05:59

您通过FXMLLoader而不是WebView创建的场景示例代码使用的替换代码很好,您不需要修改它。

您的代码将根据fxml文档显示主阶段的主场景(对于我的示例,我使用了WebView作为我的主场景,这是您不需要的,因此您不需要任何与WebView相关的代码)。

你需要的是在你想要显示一个对话框的时候,在你的控制器中有一些触发器。作为一个简单的示例,您可以为只包含一个按钮的主场景设置一个fxml,然后在控制器中为该按钮提供一个ActionHandler (就像在Introduction to FXML文档中一样)。

现在,不再像FXML简介那样只在按钮被按下时执行println,而是像WebView文档加载时那样调用dialog.show()方法。应该发生的是,对话框现在将显示在fxml生成的场景的顶部。

您将注意到该对话框本身包含一个场景。如果需要(这是可选的),可以使用fxml定义场景内容。为此,在构造对话框时,为对话框内容设置新的fxml和新控制器,并将为对话框创建的fxml场景加载到对话框的舞台中。执行此操作的代码与用于将主场景的fxml加载到primaryStage中的代码几乎相同。

尝试上面的方法,看看它对你是否有效。如果您仍然感到困惑,我可能会按照这个答案的思路创建一个特定于fxml的要点示例。

还要注意的是,引用的gist是在一段时间之前编写的,在JavaFX中现在有一个showAndWait方法,它可以在调用对话框时阻止代码执行,然后允许在不使用gist示例中的一些事件处理机制的情况下处理对话的结果。不过,无论是否使用showAndWait,策略都是完全可接受的解决方案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12539778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档