我正在尝试使用@珠海at this gist提供的示例,但我遇到了问题,因为我使用的是FXML。
我看过这两篇文章:How to create a modal window in JavaFX 2.1和this answer to JavaFX 2 modal window。
我被困在由珠海编写的代码中,它说:
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行),这样它就可以和珠海的例子一起工作了吗?
谢谢!
发布于 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,策略都是完全可接受的解决方案。
https://stackoverflow.com/questions/12539778
复制相似问题