//package com.oracle.javafx;


import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.chart.XYChart.Series;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class GraphColorIssue extends Application 
{ 
    private LineChart<Number, Number> mLineChart = 
            new LineChart<>(new NumberAxis(), new NumberAxis()); 
    private int mTime = 1; 
    private GridPane mGridPane; 
     
    public static void main(String[] args) 
    { 
        launch(args); 
    } 
    
    @Override 
    public void start( 
        final Stage primaryStage) throws Exception 
    { 
        mGridPane = new GridPane(); 
        mGridPane.add(mLineChart, 1, 1); 
        mGridPane.setMinWidth(300); 
        mGridPane.setMinHeight(300); 
         
        final Scene scene = new Scene(mGridPane); 
        primaryStage.setScene(scene); 
        primaryStage.show(); 
        simulateASyncGraphDataUpdate(); 
    } 

    private void scheduleDataLoad() 
    { 
        final Timeline timeline = new Timeline(new KeyFrame( 
                javafx.util.Duration.seconds(1), 
                ae -> simulateASyncGraphDataUpdate())); 
        timeline.play(); 
    } 
     
    public void simulateASyncGraphDataUpdate() 
    { 
        setGridContents(0, new Label("Loading...")); 
         
        final Timeline timeline = new Timeline(new KeyFrame( 
                javafx.util.Duration.seconds(1), 
                ae -> simulateDataReady())); 
        timeline.play(); 
    } 
     
    private void simulateDataReady() 
    { 
        updateLineChartData(); 
        setGridContents(0, mLineChart); 
        scheduleDataLoad(); 
    } 
     
    private void updateLineChartData() 
    { 
        // Comment this line in and you'll get colors. 
        //mLineChart = new LineChart<>(new NumberAxis(), new NumberAxis()); 
        mLineChart.setTitle("Line Chart Color Issue - using Java " + System.getProperty("java.version")); 
         
        ++mTime; 
        final Series<Number, Number> series = new Series<>(); 
        for (int x = 0; x < mTime; x++) 
        { 
            final XYChart.Data<Number, Number> dataPoint = new XYChart.Data<>(x, 5); 
            series.getData().add(dataPoint); 
        } 
        mLineChart.getData().clear(); 
        mLineChart.getData().add(series); 
    } 
     
    private void setGridContents( 
        final int index, 
        final Node node) 
    { 
        mGridPane.getChildren().set(index, node); 
    } 

} 