2017-10-08 11 views
1

一般的な方法を作成して特定のダイアログを作成したいと思います。Javafxでジェネリックダイアログメソッドを作成

private void setDialog(String dialog,String title){ 
    try { 
     // Load the fxml file and create a new stage for the popup 
     FXMLLoader loader = new FXMLLoader(Main.class.getResource("/view/" + dialog + ".fxml")); 
     AnchorPane page = (AnchorPane) loader.load(); 
     Stage dialogStage = new Stage(); 
     dialogStage.setTitle(title); 
     dialogStage.initModality(Modality.WINDOW_MODAL); 
     dialogStage.initOwner(Main.getPs()); 
     Scene scene = new Scene(page); 
     dialogStage.setScene(scene); 


    loader.getController().setDialogStage(dialogStage); 

     // Show the dialog and wait until the user closes it 
     dialogStage.showAndWait(); 


     } catch (IOException e) { 
     // Exception gets thrown if the fxml file could not be loaded 
     e.printStackTrace(); 
     } 

} 

しかし、私はこのライン

loader.getController().setDialogStage(dialogStage) 

でエラーが出ますが、正確に間違いは、私はそれをどのように修正すればよい。この

"The method setDialogStage(Stage) is undefined for the type Object" 

のですか?ありがとうございました。

私はあまり経験がありません。それは、あなたが

loader.<MyController>getController().setDialogStage(dialogStage); 

を行うことができます。これは本当に簡単キャストよりも、それ以上タイプセーフではありません

答えて

1

あなたはsetDialogStage(Stage)メソッドを定義して、いくつかのコントローラクラスMyControllerを持っていると仮定することを言います。コントローラーが正しいタイプでない場合は、実行時にClassCastExceptionで失敗します。

あなたは、このメソッドを有していてもよく、複数のコントローラを持っている場合は、最良のオプションは、それらが関連するメソッドを定義するインターフェイスを実装するために、おそらくです:

public interface DialogController { 

    public void setDialogStage(Stage dialogStage); 

} 

あなたのコントローラが

public class MyController implements DialogController { 

    // ... 

    @Override 
    public void setDialogStage(Stage dialogStage) { 
     // ... 
    } 

} 

のように見えますコントローラを一般的なものとして扱うだけです。DialogController

loader.<DialogController>getController().setDialogStage(dialogStage); 
1

独自のダイアログメカニズムを作成するのには良い理由があるかもしれませんが、JavaFXにはすでにダイアログ用にstandard wayがあることを指摘したいと思います。

ウェブサイトcode.makeryは、ダイアログを作成する方法のいくつかの例を示しています

Alert alert = new Alert(AlertType.CONFIRMATION); 
alert.setTitle("Confirmation Dialog"); 
alert.setHeaderText("Look, a Confirmation Dialog"); 
alert.setContentText("Are you ok with this?"); 

Optional<ButtonType> result = alert.showAndWait(); 
if (result.get() == ButtonType.OK){ 
    // ... user chose OK 
} else { 
    // ... user chose CANCEL or closed the dialog 
} 

Confirmation dialog

ます。また、カスタムコンテンツとの対話を作成することができます。 Exception Dialog

関連する問題