2017-03-20 22 views
1

我正在使用Jfoenix,JFXDialog未出現。使用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(); 

回答

1

你在做什麼是,你正在添加你的JFXDialog到一個StackPane並顯示你的對話框。通過

JFXDialog dialog =new JFXDialog(stackpane, content, JFXDialog.DialogTransition.CENTER); 
.... 
.... 
.... 
dialog.show(); 

其實這是做的是顯示對話框裏面的對話框創建對話框。問題是堆棧窗格從未顯示,所以對話框也不會顯示。這就像在計算機關閉時試圖打開文檔。

首先,這部分是完全正確的

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); 

這裏如果stackpane是你的根窗格剛剛從創建現場,並分別顯示primaryStage和對話後(實際上你沒有表現出primaryStage第一和對話框第二,但這個順序更有意義)。

Scene scene = new Scene(stackpane, 300, 250); 
primaryStage.setScene(scene); 
primaryStage.show(); 
dialog.show(); 

如果你已經有了另一根窗格顯示primaryStage和對話前stackpane添加到它。

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(); 

primaryStage來自應用程序類的過載啓動方法。以下是根窗格作爲堆棧窗格

@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(); 
}