import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.chart.NumberAxis; import javafx.scene.chart.StackedAreaChart; import javafx.scene.chart.XYChart; import javafx.scene.control.Button; import javafx.scene.layout.HBox; import javafx.stage.Stage; import java.util.ArrayList; import java.util.List; import java.util.Random; import static javafx.collections.FXCollections.*; import static javafx.scene.chart.XYChart.Series; public class AreaChartSample extends Application { private Series seriesApril; private Series seriesMay; private StackedAreaChart chart; @Override public void start(Stage stage) { stage.setTitle("Area Chart Sample"); NumberAxis xAxis = new NumberAxis("X-Axis", 0.0d, 10.0d, 2.0d); NumberAxis yAxis = new NumberAxis("Y-Axis", 0.0d, 13.0d, 2.0d); Series s1 = new Series( FXCollections.observableArrayList( new XYChart.Data(1,2), new XYChart.Data(2,3), new XYChart.Data(3,5), new XYChart.Data(4,1), new XYChart.Data(6,4), new XYChart.Data(7,2), new XYChart.Data(8,3), new XYChart.Data(9,4) )); s1.setName("Set 1"); Series s2 = new Series( FXCollections.observableArrayList( new XYChart.Data(1,1), new XYChart.Data(2,4), new XYChart.Data(3,2), new XYChart.Data(6,5), new XYChart.Data(7,3), new XYChart.Data(8,2), new XYChart.Data(9,1) )); s2.setName("Set 2"); Series s3 = new Series( FXCollections.observableArrayList( new XYChart.Data(1,5), new XYChart.Data(2,3), new XYChart.Data(3,1), new XYChart.Data(4,2), new XYChart.Data(6,3), new XYChart.Data(7,1), new XYChart.Data(8,4) )); s3.setName("Set 3"); ObservableList data = FXCollections.observableArrayList(s1, s2, s3); chart = new StackedAreaChart(xAxis, yAxis, data); chart.setMaxSize(350, 250); chart.setPrefSize(350, 250); HBox root = new HBox(5); Button changeSeries = new Button("Change series data"); changeSeries.setOnAction(new EventHandler() { Random random = new Random(); @Override public void handle(ActionEvent actionEvent) { List series_data = new ArrayList(); series_data.add(new XYChart.Data(0.5, 1)); series_data.add(new XYChart.Data(1.5, 2)); series_data.add(new XYChart.Data(2.5, 1)); series_data.add(new XYChart.Data(3.5, 2)); series_data.add(new XYChart.Data(5.5, 3)); series_data.add(new XYChart.Data(6.5, 1)); series_data.add(new XYChart.Data(7.5, 1)); series_data.add(new XYChart.Data(8.5, 2)); series_data.add(new XYChart.Data(0.5, 1)); chart.setAnimated(true); int overall_counter = 0; end: for (Series series : (ObservableList>) chart.getData()) { int size = series.getData().size(); for (int i = 0; i < size / 2; i++) { if (overall_counter >= series_data.size()) { break end; } series.getData().set(i * 2 + 1, series_data.get(overall_counter++)); } } } void changeData(XYChart.Data data) { data.setYValue(data.getYValue() + random.nextInt(20) - 10); } }); root.getChildren().add(chart); root.getChildren().add(changeSeries); Scene scene = new Scene(root,800,600); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); } }