bas*_*aad 1 dialog javafx javafx-8 controlsfx
我目前正在探索 Java JDK 8u40 的新功能,我必须说我真的很喜欢内置对话框类。与 ControlsFX 相比,当对话框打开时没有背景效果(ControlsFX 使背景显得更暗)。我还想使用 JavaFX 中的新对话框类来执行此操作。我正在使用以下代码:
\n\nTextInputDialog dialog = new TextInputDialog();\ndialog.initOwner(null);\ndialog.initStyle(StageStyle.UNDECORATED);\ndialog.setHeaderText(\xe2\x80\x9cPlease fill in a new number\xe2\x80\x9c);\ndialog.setContentText(\xe2\x80\x9cNew number:\xe2\x80\x9d);\n\n//Check if the optional is filled in\nOptional<String> newAmount = dialog.showAndWait();\nif (result.isPresent()){\n System.out.println(\xe2\x80\x9cNew number: " + result.get());\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我在对话框类中找不到任何有用的部分。我尝试了这段代码,但它有点老套,而且有点慢:
\n\nmyMainFlowPane.setOpacity(0.5);\n// ..... dialog code ..... //\nmyMainFlowPane.setOpacity(1.0);\nRun Code Online (Sandbox Code Playgroud)\n\n你应该说必须有一个内置方法。你们中有人知道该怎么做吗?
\n\n任何帮助是极大的赞赏!
\n您可以轻松实现相同的效果。要在场景和对话框之间添加这个不透明层,只需在场景顶部添加一个不可见区域,并在对话框显示之前使其可见并具有一定的透明度,并在对话框关闭后再次隐藏它。
@Override
public void start(Stage primaryStage) {
final Region opaqueLayer = new Region();
opaqueLayer.setStyle("-fx-background-color: #00000044;");
opaqueLayer.setVisible(false);
Button btn = new Button("Show Dialog");
btn.setOnAction(t -> {
TextInputDialog dialog = new TextInputDialog();
dialog.initOwner(null);
dialog.initStyle(StageStyle.UNDECORATED);
dialog.setHeaderText("Please fill in a new number");
dialog.setContentText("New number:");
opaqueLayer.setVisible(true);
//Check if the optional is filled in
Optional<String> result = dialog.showAndWait();
opaqueLayer.setVisible(false);
if (result.isPresent()){
System.out.println("New number: " + result.get());
}
});
StackPane root = new StackPane(btn,opaqueLayer);
Scene scene = new Scene(root, 800, 600);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
opaqueLayer.resizeRelocate(0, 0, scene.getWidth(), scene.getHeight());
}
Run Code Online (Sandbox Code Playgroud)
这只会影响场景,但您可以将其扩展到所有屏幕。