package sample;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;

import java.util.ArrayList;
import java.util.List;


public class Main extends Application {

	static int count = 0;
	ChangeListener l =
			(o, ol, ne) -> {
				System.out.println("\nModified ---- old : " + ol + " new : " + ne);
				count++;
				System.out.print("##################### : " + count);
			};
 	@Override
 	public void start(Stage primaryStage) {
 		try {

 			BorderPane root = new BorderPane();

 			int treeDepth = 10;
			StackPane[] paneArray = new StackPane[treeDepth];

			paneArray[0] = new StackPane();
			paneArray[0].getStyleClass().add("test-css");
			paneArray[0].maxWidthProperty().addListener(l);

			for (int i=1; i<treeDepth; ++i) {
				paneArray[i] = new StackPane(paneArray[i-1]);
				paneArray[i].getStyleClass().add("test-css");

				paneArray[i].maxWidthProperty().addListener(l);
			}

			// StackPane at [treeDepth-1] is parent of the StackPane hierarchy
 			root.setCenter(paneArray[treeDepth-1]);

 			HBox box = new HBox();

 			{
 				Button b = new Button("Modify Pane[0] CSS");
 				b.setOnAction( e -> paneArray[0].getStyleClass().add("dummy"));
 				box.getChildren().add(b);
 			}

            {
                Button b = new Button("Modify Pane[9] CSS");
                b.setOnAction( e -> paneArray[treeDepth-1].getStyleClass().add("dummy"));
                box.getChildren().add(b);
            }

 			{
 				Button b = new Button("Modify Root CSS");
 				b.setOnAction( e -> {
 					root.getStyleClass().add("dummy");
 				});
 				box.getChildren().add(b);
 			}

 			root.setBottom(box);

 			Scene scene = new Scene(root,400,400);
 			scene.getStylesheets().addAll(getClass().getResource("application.css").toExternalForm());
 			primaryStage.setScene(scene);
 			primaryStage.show();
 		} catch(Exception e) {
 			e.printStackTrace();
 		}
 	}

		public static void main(String[] args) {
 		launch(args);
 	}
}