import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeView;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;

public class SampleRenderingIssue extends Application {
    private final StackPane root = new StackPane();
    private final Scene scene = new Scene(root, 300, 250);
    private final BorderPane pane = new BorderPane();
    private final Canvas canvas = new Canvas();


    @Override
    public void start(Stage stage) {
        stage.setTitle("Sample Canvas " + System.getProperty("java.runtime.version"));

        HBox vbox = new HBox();
        HBox.setHgrow(pane, Priority.ALWAYS);
        vbox.getChildren().addAll( createTreeView(), pane );

        pane.getChildren().add(canvas);
        root.getChildren().add(vbox);
        scene.getStylesheets().add( SampleRenderingIssue.class.getResource("dark.css").toExternalForm());
        stage.setScene(scene);
        stage.sizeToScene();
        setupCanvasPane();
        stage.show();
        Platform.runLater(()-> paint());
    }
    private void setupCanvasPane(){
        canvas.widthProperty().bind(pane.widthProperty());
        canvas.heightProperty().bind(pane.heightProperty());
        pane.widthProperty().addListener((o,p,c)-> paint());
        paint();
    }

    public void paint(){
        GraphicsContext gr = canvas.getGraphicsContext2D();
        gr.clearRect( 0,0, canvas.getWidth(), canvas.getHeight() );
        gr.setFill( Color.web("#1d1d1d") );
        gr.fillRect( 0,0,canvas.getWidth(), canvas.getHeight());
        gr.setFont( Font.font( "Monospaced"));
        gr.setFill( Color.web("#e39d62") );
        gr.fillText("SELECT * FROM", 50, 70 );
        gr.setFill( Color.WHITE );
        gr.fillText("Child Node", 50, 88 );
    }

    private TreeView createTreeView(){
        final TreeItem<String> childNode1 = new TreeItem<>("Child Node 1");
        final TreeItem<String> childNode2 = new TreeItem<>("Child Node 2");
        final TreeItem<String> childNode3 = new TreeItem<>("Child Node 3");

        //Creating the root element
        final TreeItem<String> root = new TreeItem<>("Root node");
        root.setExpanded(true);

        //Adding tree items to the root
        root.getChildren().setAll(childNode1, childNode2, childNode3);


        //Creating a tree table view
        final TreeView<String> treeView = new TreeView<>(root);
        treeView.setPrefWidth(152);
        treeView.setShowRoot(true);
		treeView.setStyle("-fx-font-family: Monospaced");

        return treeView;
    }

    public static void main(String[] args) {
        launch(args);
    }


}