JavaFX的2.2模态窗口对话框*带* FXML(JavaFX 2.2 Modal window

2019-07-31 19:07发布

我试图使用由@jewelsea提供的例子,在这个主旨和我坚持,因为我使用FXML。

我已经看到了这两个职位: 如何创建JavaFX中2.1模式窗口和这个答案的JavaFX 2模式窗口 。

当我被困在由jewelsea,那里说的代码:

final WebView webView = new WebView(); 
webView.getEngine().load("http://docs.oracle.com/javafx/");
primaryStage.setScene(new Scene(webView));

然而,因为我使用FXML,我这样做:

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("MyFXML.fxml"));
Scene scene = (Scene)fxmlLoader.load();
myController = fxmlLoader.getController();
primaryStage.setScene(scene);

你能告诉我如何修改我的代码(4条以上线),因此它与jewelsea的示例工作?

谢谢!

Answer 1:

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

您的代码会显示基于一个FXML文档,以供初级阶段的主场景(我的样品,我使用的WebView作为我的主场景,你并不需要,所以你不需要任何的WebView相关的代码从要旨)。

你需要的是在您的控制器在要显示一个对话框,在某个时间触发。 举个简单的例子,你可以设置你的主场景中的FXML刚刚包括按钮,然后提供在您的控制器按钮的的ActionHandler(就像在介绍FXML文件)。

现在,而不是仅仅做一个println当按钮被按下的介绍FXML了,叫dialog.show()一样要点方法在文件的WebView负载时一样。 什么应该发生的是,对话框将现在你FXML生成场景的顶部显示。

你会发现,对话本身包含一个场景。 如果你想(这是可选的),你可以使用FXML定义场景内容。 要做到这一点,在对话框施工时,您为对话内容的新FXML和新的控制器,并加载FXML创建场景对话进入对话的舞台。 要做到这一点的代码几乎相同的代码,您所使用的主场景的FXML加载到primaryStage什么。

试试上面,看看它是否适合你。 如果你还在坚持我也许可以创建沿着这个答案的线主旨的FXML具体例子。

还要注意的是所引用的主旨是前一段时间写的,有一个现在showAndWait在JavaFX的方法进行对话呼叫,然后允许处理对话的结果时,这有利于阻止代码的执行,而无需使用一些事件处理程序从主旨示例机制。 既没有showAndWait战略是完全可以接受的解决方案,虽然。



文章来源: JavaFX 2.2 Modal window dialog *with* FXML