Search code examples
formsjavafxstage

add a form into pop up stage (Customize Stage content)


I have a button called add new user by hitting that a pop up window should come out containing a add user form . Here is my function for that button :

public void  btnAddeNewClicked(){


        final TextField name = new TextField() ;
        final TextField addr = new TextField() ;
        final TextField wp = new TextField() ;
        final TextField state = new TextField() ;
        final TextField loginName = new TextField() ;
        final Label labelUsername = new Label();
        final Label labelAddress = new Label();
        final Label labelWebPage = new Label();
        final Label labelState = new Label();
        final Label labelloginName = new Label();
        final Button btn = new Button("Add");


        Stage dialog = new Stage();
        dialog.initStyle(StageStyle.UTILITY);
        Scene scene = new Scene(btn);
        dialog.setScene(scene);
        dialog.show();


}

the problem is I don't know how to add my form into my Stage . Any help is strongly appreciated :)


Solution

  • Use any of the layout to add the content of your popup. Later, add this layout as the root of the scene.

    In the following example, I have used a GridPane.

    import javafx.application.Application;
    import javafx.geometry.HPos;
    import javafx.geometry.Insets;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.Label;
    import javafx.scene.control.TextField;
    import javafx.scene.layout.GridPane;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
    import javafx.stage.StageStyle;
    
    public class Main extends Application {
    
        public static void main(String[] args) {
            launch(args);
        }
    
        @Override
        public void start(Stage primaryStage) throws Exception {
            Button button = new Button("Show Popup");
            button.setOnAction(e -> btnAddeNewClicked());
            Scene scene = new Scene(new StackPane(button), 200, 200);
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    
        public void  btnAddeNewClicked(){
    
            final TextField name = new TextField() ;
            final TextField addr = new TextField() ;
            final TextField wp = new TextField() ;
            final Label labelUsername = new Label("Username");
            final Label labelAddress = new Label("Address");
            final Label labelWebPage = new Label("Web Page");
            final Button btn = new Button("Add");
    
            GridPane gridPane = new GridPane();
            gridPane.setVgap(10);
            gridPane.setHgap(10);
            gridPane.setPadding(new Insets(10));
    
            gridPane.add(labelUsername, 0, 0);
            gridPane.add(name, 1, 0);
            gridPane.add(labelAddress, 0, 1);
            gridPane.add(addr, 1, 1);
            gridPane.add(labelWebPage, 0, 2);
            gridPane.add(wp, 1, 2);
            gridPane.add(btn, 0, 3, 2, 1);
            GridPane.setHalignment(btn, HPos.CENTER);
    
            Stage dialog = new Stage();
            dialog.initStyle(StageStyle.UTILITY);
            Scene scene = new Scene(gridPane);
            dialog.setScene(scene);
            dialog.show();
        }
    }
    

    OUTPUT

    enter image description here