我用的是Jfoenix,JFXDialog没有出现。
我究竟做错了什么 ?这是代码:
JFXDialogLayout content= new JFXDialogLayout();
content.setHeading(new Text("Error, No selection"));
content.setBody(new Text("No student selected"));
StackPane stackpane = new StackPane();
JFXDialog dialog =new JFXDialog(stackpane, content, JFXDialog.DialogTransition.CENTER);
JFXButton button=new JFXButton("Okay");
button.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
dialog.close();
}
});
content.setActions(button);
dialog.show();
Run Code Online (Sandbox Code Playgroud)
小智 6
您正在做的是,您将 JFXDialog 添加到 StackPane 并显示您的对话框。经过
JFXDialog dialog =new JFXDialog(stackpane, content, JFXDialog.DialogTransition.CENTER);
....
....
....
dialog.show();
Run Code Online (Sandbox Code Playgroud)
实际上,这是在创建对话框的堆栈窗格内显示对话框。问题是stackpane 永远不会显示,所以对话框也永远不会显示。这就像在您的计算机关闭时尝试打开文档。
首先,这部分是完全正确的
JFXDialogLayout content= new JFXDialogLayout();
content.setHeading(new Text("Error, No selection"));
content.setBody(new Text("No student selected"));
StackPane stackpane = new StackPane();
JFXDialog dialog =new JFXDialog(stackpane, content, JFXDialog.DialogTransition.CENTER);
JFXButton button=new JFXButton("Okay");
button.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
dialog.close();
}
});
content.setActions(button);
Run Code Online (Sandbox Code Playgroud)
在此之后,如果 stackpane 是您的根窗格,只需从中创建场景并分别显示 primaryStage 和 dialog(实际上您不必先显示 primaryStage 和第二个对话框,但此顺序更有意义)。
Scene scene = new Scene(stackpane, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
dialog.show();
Run Code Online (Sandbox Code Playgroud)
如果您已经有另一个根窗格,则在显示 primaryStage 和对话框之前将堆栈窗格添加到其中。
AnchorPane root = new AnchorPane();
....
.... //Some other Nodes here
JFXDialogLayout content= new JFXDialogLayout();
content.setHeading(new Text("Error, No selection"));
content.setBody(new Text("No student selected"));
StackPane stackPane = new StackPane();
JFXDialog dialog =new JFXDialog(stackPane, content, JFXDialog.DialogTransition.CENTER);
JFXButton button=new JFXButton("Okay");
button.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
dialog.close();
}
});
content.setActions(button);
Scene scene = new Scene(root, 300, 250);
root.getChildren().add(stackPane);
primaryStage.setScene(scene);
primaryStage.show();
dialog.show();
Run Code Online (Sandbox Code Playgroud)
primaryStage 来自 Application 类的重写 start 方法。下面是根窗格作为stackpane 的那个。
@Override
public void start(Stage primaryStage) throws Exception {
JFXDialogLayout content= new JFXDialogLayout();
content.setHeading(new Text("Error, No selection"));
content.setBody(new Text("No student selected"));
StackPane stackpane = new StackPane();
JFXDialog dialog =new JFXDialog(stackpane, content, JFXDialog.DialogTransition.CENTER);
JFXButton button=new JFXButton("Okay");
button.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
dialog.close();
}
});
content.setActions(button);
Scene scene = new Scene(stackpane, 300, 250);
primaryStage.setScene(scene);
dialog.show();
primaryStage.show();
}
Run Code Online (Sandbox Code Playgroud)