package checkradiobox;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class CheckBoxRadioButtonDemo extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
    	// Set checkBoxes
        CheckBox box1 = new CheckBox("Option 1");
        CheckBox box2 = new CheckBox("Option 2");
        CheckBox box3 = new CheckBox("Option 3");
        box2.setSelected(true);
        
        box1.selectedProperty().addListener(new ChangeListener<Boolean>() {
			@Override
			public void changed(ObservableValue<? extends Boolean> ov, 
					Boolean old_val, Boolean new_val) {
            	if (box1.isSelected()) {
            		System.out.println("CheckBox 1 is selected");
            	} else {
            		System.out.println("CheckBox 1 is deselected");
            	}
            }
        });
        box2.selectedProperty().addListener(new ChangeListener<Boolean>() {
        	@Override
			public void changed(ObservableValue<? extends Boolean> ov, 
					Boolean old_val, Boolean new_val) {
            	if (box2.isSelected()) {
            		System.out.println("CheckBox 2 is selected");
            	} else {
            		System.out.println("CheckBox 2 is deselected");
            	}
            }
        });
        box3.selectedProperty().addListener(new ChangeListener<Boolean>() {
            public void changed(ObservableValue<? extends Boolean> ov, 
            		Boolean old_val, Boolean new_val) {
            	if (box3.isSelected()) {
            		System.out.println("CheckBox 3 is selected");
            	} else {
            		System.out.println("CheckBox 3 is deselected");
            	}
            }
        });

        //Button
        Button cbButton = new Button("Ok");
        cbButton.setOnAction(new EventHandler<ActionEvent>() {
			@Override
			public void handle(ActionEvent arg0) {
				String message = "Selected boxes: ";

		        if(box1.isSelected()) {
		            message += "1, ";
		        }
		        if(box2.isSelected()) {
		            message += "2, ";
		        }
		        if(box3.isSelected()) {
		            message += "3, ";
		        }
		        message += "\n";
		        
		        System.out.println(message);
			}
        });

        //Layout
        VBox cbLayout = new VBox(10);
        cbLayout.setPadding(new Insets(20, 20, 20, 20));
        cbLayout.getChildren().addAll(new Label("Check boxes"), box1, box2, box3, cbButton);
        
        //-----------------------------------------------------------
        
        // Set RadioBoxes
        ToggleGroup rbGroup = new ToggleGroup();
        RadioButton button1 = new RadioButton("Option 1");
        RadioButton button2 = new RadioButton("Option 2");
        RadioButton button3 = new RadioButton("Option 3");
        button1.setToggleGroup(rbGroup);
        button2.setToggleGroup(rbGroup);
        button3.setToggleGroup(rbGroup);
        button2.setSelected(true);

        //Button
        Button rbButton = new Button("Ok");
        rbButton.setOnAction(new EventHandler<ActionEvent>() {
			@Override
			public void handle(ActionEvent arg0) {
				String message = "Selected button: ";

		        if(button1.isSelected()) {
		            message += "1\n";
		        } else if(button2.isSelected()) {
		            message += "2\n";
		        } else if(button3.isSelected()) {
		            message += "3\n";
		        }
		        
		        System.out.println(message);
			}
        });

        //Layout
        VBox rbLayout = new VBox(10);
        rbLayout.setPadding(new Insets(20, 20, 20, 20));
        rbLayout.getChildren().addAll(new Label("Radio buttons"), button1, button2, button3, rbButton);
        
        //-----------------------------------------------------------

        BorderPane layout = new BorderPane();
        layout.setLeft(cbLayout);
        layout.setRight(rbLayout);
        primaryStage.setTitle("CheckBox and RadioButton Demo");
        primaryStage.setScene(new Scene(layout));
        primaryStage.show();
    }
}
