2016-10-13 3 views
1

カスタムJavaFXダイアログを作成します。これまでのところ、私はそのようなものを作成しました:カスタムJavaFXダイアログ

public class LoginDialog extends Dialog { 

    public LoginDialog(Data data) { 
     try { 
      FXMLLoader loader = new FXMLLoader(getClass().getResource("fxml/LoginDialog.fxml")); 
      Parent root = loader.load(); 
      LoginDialogController controller = loader.<LoginDialogController>getController(); 
      controller.setModel(new LoginModel(data)); 
      getDialogPane().setContent(root); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

しかし、これは正しい方法であると私は確信していません。

2番目 - showAndWait()呼び出しの後、このLoginDialogを閉じるには、LoginDialog.fxmlファイルで宣言されたButtonを使用します。出来ますか?戻り値を設定するにはどうすればよいですか?

答えて

3

は、コントローラからウィンドウを閉じます:

public class LoginDialogController { 

    @FXML 
    private Button button ; 

    @FXML 
    private void handleButtonPress() { 
     button.getScene().getWindow().hide(); 
    } 

    // ... 
} 

(とあなたが<Button fx:id="button" onAction="#handleButtonPress" ... />ようなものが必要FXMLで)

を、値を返すダイアログのタイプを指定し、結果コンバータを設定するには:明らか

public class LoginDialog extends Dialog<SomeDataType> { 

    public LoginDialog(Data data) { 
     try { 
      FXMLLoader loader = new FXMLLoader(getClass().getResource("fxml/LoginDialog.fxml")); 
      Parent root = loader.load(); 
      LoginDialogController controller = loader.<LoginDialogController>getController(); 
      controller.setModel(new LoginModel(data)); 
      getDialogPane().setContent(root); 

      setResultConverter(buttonType -> { 
       SomeDataType someData = ... ; 
       return someData ; 
      }); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

あなたに応じて異なる値を返すことができるようにあなたは、等、結果コンバータコントローラを参照することでメソッドを呼び出すことができユーザーがUIで何をするか。

2

あなたは私がsepearateコントローラを作成していると私は

をポップアップ取得scroll down toパソコンへ転送として、この方法は、私が好ましく、次のよう

public void popup() { 
     final Stage dialog = new Stage(); 
     dialog.setTitle("Confirmation"); 
     Button yes = new Button("Yes"); 
     Button no = new Button("No"); 

     Label displayLabel = new Label("What do you want to do ?"); 
     displayLabel.setFont(Font.font(null, FontWeight.BOLD, 14)); 

     dialog.initModality(Modality.NONE); 
     dialog.initOwner((Stage) tableview.getScene().getWindow()); 

     HBox dialogHbox = new HBox(20); 
     dialogHbox.setAlignment(Pos.CENTER); 

     VBox dialogVbox1 = new VBox(20); 
     dialogVbox1.setAlignment(Pos.CENTER_LEFT); 

     VBox dialogVbox2 = new VBox(20); 
     dialogVbox2.setAlignment(Pos.CENTER_RIGHT); 

     dialogHbox.getChildren().add(displayLabel); 
     dialogVbox1.getChildren().add(yes); 
     dialogVbox2.getChildren().add(no); 

     yes.addEventHandler(MouseEvent.MOUSE_CLICKED, 
       new EventHandler<MouseEvent>() { 
        @Override 
        public void handle(MouseEvent e) { 
         // inside here you can use the minimize or close the previous stage// 
         dialog.close(); 
        } 
       }); 
     no.addEventHandler(MouseEvent.MOUSE_CLICKED, 
       new EventHandler<MouseEvent>() { 
        @Override 
        public void handle(MouseEvent e) { 
         dialog.close(); 
        } 
       }); 

     dialogHbox.getChildren().addAll(dialogVbox1, dialogVbox2); 
     Scene dialogScene = new Scene(dialogHbox, 500, 40); 
     dialogScene.getStylesheets().add("//style sheet of your choice"); 
     dialog.setScene(dialogScene); 
     dialog.show(); 
    } 

を使用してダイアログを作成することができます

関連する問題