import java.util.ArrayList;
import javafx.application.Application;
 
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
 
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
 
 
public class MoveNodesTest extends Application {
    Scene scene;
    
    BorderPane master = new BorderPane();
    
    HBox hbox =new HBox(80);
    BorderPane bpa1 = new BorderPane();
    BorderPane bpa2 = new BorderPane();
    
    
    
    Button init = new Button("Init");
    Button b = new Button("Change");
    Label time = new Label();
    
    BorderPane borderNodes = new BorderPane();
    // StackPane sp = new StackPane();
    Pane pane_nodes = new Pane();
    
    boolean one = false;
    
    @Override
    public void start(Stage primaryStage) {
         
        b.setDisable(true);
        borderNodes.setCenter(pane_nodes);
        // sp.getChildren().add(pane_nodes);
         
        master.setCenter(hbox);
        
        hbox.getChildren().addAll(bpa1, bpa2);
        
        master.setLeft(init);
        master.setBottom(b);
        
       
        init.setOnAction( (e) -> {
          until(100000);
        });
        
        b.setOnAction( (e) -> {
           if(one == false ) {
             
              long tm = System.currentTimeMillis();
              bpa1.setCenter(borderNodes);
              b.setText("Change b");
              one = true;
              
              long res = System.currentTimeMillis() - tm;
              time.setText(""+res+ " ms");
               
           }else {
           
             if( one == true) {
              
                long tm = System.currentTimeMillis();
                
                bpa2.setCenter(borderNodes);
                //sp.getChildren().add(pane_nodes);
                b.setText("Change a");
                one = false;
                
                long res = System.currentTimeMillis() - tm;
                time.setText(""+res+ " ms");
                 
             }
             
           }
           
        });
        
        Scene scene = new Scene(master, 700, 600);
        
        primaryStage.setTitle("Move Nodes");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    
    
      
    private void until(int n) {
       long l1 = System.currentTimeMillis();
       
       ArrayList<Node> nodes = new ArrayList();
       // ObservableList<Node> nodes = FXCollections.observableArrayList();
       
       for(int x=0; x < n; x++) {
          Rectangle rec = new Rectangle(0,0,10,20);
          rec.setLayoutX(10);
          rec.setLayoutY(10);
          rec.setFill(Color.BLUE);
          Group group = new Group();
          group.getChildren().add(rec);
          nodes.add(rec);
       }
       
       long res = System.currentTimeMillis() - l1;
       
       master.setLeft(time);
       time.setText(""+res+ " ms");
      
       b.setDisable(false);
        
       pane_nodes.getChildren().addAll(nodes);
       
    }

    public static void main(String[] args) {
        launch(args);
    }
    
} 