import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.*;
import javafx.scene.control.*;
import javafx.scene.text.*;                             //for Text class
import javafx.collections.*;                            //for ObservableList 
import javafx.geometry.*;                               //for Insets

public class Awindow2 extends Application  
{
    @Override
    public void start(Stage win) throws Exception 
    {
        win.setTitle("Window using FlowPane layout");

        Text title = new Text("   My Application   ");
        title.setFont(Font.font("Verdana", FontWeight.BOLD, 20));
        
        MenuBar  menus = new MenuBar();                             //create a menu bar
        Menu     menu1 = new Menu("File");                          //create a menu
        MenuItem open  = new MenuItem("Open");                      //create a menu item
        MenuItem save  = new MenuItem("Save");
        MenuItem print = new MenuItem("Print");
        MenuItem exit  = new MenuItem("Exit");
        Menu     menu2 = new Menu("Edit");
        MenuItem find  = new MenuItem("Find");
        MenuItem rplc  = new MenuItem("Replace");
        MenuItem copy  = new MenuItem("Copy");
        MenuItem paste = new MenuItem("Paste");
        
        menu1.getItems().addAll(open,save,print,exit);              //add menu items in menu
        menu2.getItems().addAll(find,rplc,copy,paste);
        menus.getMenus().addAll(menu1,menu2);                       //add menus in menu bar
        
        Label     label1 = new Label("Enter Name    ");             //create a label
        TextField field1 = new TextField("Sam Sultan");             //create a textfield with initial value                
        TextArea  field2 = new TextArea("line1 \n line2");          //create a textarea with initial values            

        RadioButton radio1 = new RadioButton("Male");               //create a radio button
        RadioButton radio2 = new RadioButton("Female");
        radio1.setSelected(true);                                   //turn on first radio button
        ToggleGroup radioGroup = new ToggleGroup();                 //create a radio group
        radio1.setToggleGroup(radioGroup);                          //add radio button to radio group
        radio2.setToggleGroup(radioGroup);
        
        CheckBox check1 = new CheckBox("Red");                      //create a checkbox
        CheckBox check2 = new CheckBox("Blue");
        check1.setSelected(true);

        ChoiceBox<String> singleSelect = new ChoiceBox<String>();               //single dropdown select list
        singleSelect.getItems().add("High School");
        singleSelect.getItems().add("Bachelor");
        singleSelect.getItems().add("Master");
        singleSelect.getItems().add("PHD");
        singleSelect.getSelectionModel().select(0);
 
        ListView<String> multiSelect = new ListView<String>();                  //multiple scrollable select list
        String[] animals = {"Dogs","Cats","Birds","Fish","Turtles","Other"};
        ObservableList<String> list = FXCollections.observableArrayList(animals);
        multiSelect.setItems(list);
        multiSelect.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
        multiSelect.setPrefWidth(70);
        multiSelect.setPrefHeight(25);

        Button submit = new Button("   Submit    ");
        Button cancel = new Button("   Cancel    ");

        Region space1    = new Region();                    //create regions for spacing
        space1.setPrefSize(24, 0);                          //width, height
        Region space2    = new Region();
        space2.setPrefSize(24, 0);
        Region space3    = new Region();
        space3.setPrefSize(24, 0);
        Region nextline1 = new Region();
        nextline1.setPrefSize(Double.MAX_VALUE, 0);
        Region nextline2 = new Region();
        nextline2.setPrefSize(Double.MAX_VALUE, 0);

        FlowPane pane = new FlowPane();                     //create a flow layout manager
        pane.setPadding(new Insets(10,0,0,10));             //padding around top,right,bottom,left
        pane.setHgap(5);                                    //padding between components
        pane.setVgap(10);

        pane.getChildren().add(menus);                      //add components to layout manager 
        pane.getChildren().add(title); 
        pane.getChildren().add(nextline1);
        pane.getChildren().add(label1); 
        pane.getChildren().add(field1);
        pane.getChildren().add(field2);
        pane.getChildren().addAll(radio1, radio2);
        pane.getChildren().add(space1);
        pane.getChildren().addAll(check1,check2);
        pane.getChildren().add(space2);
        pane.getChildren().add(singleSelect);
        pane.getChildren().add(space3);
        pane.getChildren().add(multiSelect);
        pane.getChildren().add(nextline2);
        pane.getChildren().add(submit);
        pane.getChildren().add(cancel);
   
        Scene scene = new Scene(pane, 500, 360);        
        
        win.setScene(scene);
        win.setResizable(false);
        win.show();
    }

    public static void main(String[] args) 
    {
        Application.launch(args);
    }
}