import javafx.application.Application; import javafx.application.Platform; import javafx.beans.property.SimpleObjectProperty; import javafx.collections.FXCollections; import javafx.scene.Scene; import javafx.scene.chart.CategoryAxis; import javafx.scene.chart.ScatterChart; import javafx.scene.chart.XYChart; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; import javafx.scene.text.Font; import javafx.stage.Stage; import java.util.concurrent.TimeUnit; import static javafx.collections.FXCollections.observableArrayList; import static javafx.scene.chart.XYChart.Data; import static javafx.scene.chart.XYChart.Series; public class LineChartSample extends Application { private HBox root; @Override public void start(Stage stage) { stage.setTitle("Line Chart Sample"); root = new HBox(4); Scene scene = new Scene(root, 600, 400); // System.setProperty("http.proxyHost", "www-proxy.uk.oracle.com"); // System.setProperty("http.proxyPort", "80"); // scene.getStylesheets().add(LineChartSample.class.getResource("font.css").toExternalForm()); Font.loadFont(LineChartSample.class.getResourceAsStream("arialw7.ttf"), 12); String cssFontUrl = LineChartSample.class.getResource("custom_font.css").toExternalForm(); scene.getStylesheets().add(cssFontUrl); stage.setScene(scene); stage.show(); // addChartToScenegraph(); // addChartToScenegraph(); Series s1 = new Series( observableArrayList( new Data("First", "First"), new Data("Second", "Second"), new Data("Fourth", "Third") )); s1.setName("Something quite long but not too long etc etc etcSomething quite long but not too long etc etc etc"); Series s2 = new Series( observableArrayList( new Data("First", "Third"), new Data("Second", "First"), new Data("Fourth", "Second") )); s2.setName("Set 2"); Series s3 = new Series( observableArrayList( new Data("First", "Second"), new Data("Second", "Third"), new Data("Third", "First") )); s3.setName("Set 3"); CategoryAxis x_axis = new CategoryAxis(); x_axis.setCategories(FXCollections.observableArrayList("First", "Second", "Third"));; CategoryAxis y_axis = new CategoryAxis(); y_axis.setCategories(FXCollections.observableArrayList("First", "Second", "Third"));; ScatterChart chart = new ScatterChart(x_axis, y_axis); chart.setAnimated(false); int width = 300; int height = 300; chart.setMaxSize(width, height); chart.setPrefSize(width, height); chart.setTitle("ScatterChart"); chart.setStyle("-fx-border-color: darkgray;"); chart.getData().addAll(s1, s2, s3); root.getChildren().add(chart); stage.show(); } private void addChartToScenegraph() { new Thread(new Runnable() { @Override public void run() { sleep(); final SimpleObjectProperty chartHolder = new SimpleObjectProperty(); Platform.runLater(new Runnable() { @Override public void run() { chartHolder.set(createChart()); root.getChildren().add(chartHolder.get()); } }); Series s1 = new Series( observableArrayList( new Data("First", "First"), new Data("Second", "Second"), new Data("Fourth", "Third") )); s1.setName("Set 1"); Series s2 = new Series( observableArrayList( new Data("First", "Third"), new Data("Second", "First"), new Data("Fourth", "Second") )); s2.setName("Set 2"); Series s3 = new Series( observableArrayList( new Data("First", "Second"), new Data("Second", "Third"), new Data("Third", "First") )); s3.setName("Set 3"); sleep(); Platform.runLater(new Runnable() { @Override public void run() { addSeries(chartHolder.get(), s1); } }); sleep(); Platform.runLater(new Runnable() { @Override public void run() { addSeries(chartHolder.get(), s2); } }); sleep(); Platform.runLater(new Runnable() { @Override public void run() { addSeries(chartHolder.get(), s3); } }); } private void sleep() { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } }).start(); } ScatterChart createChart() { CategoryAxis x_axis = new CategoryAxis(); x_axis.setCategories(FXCollections.observableArrayList("First", "Second", "Third"));; CategoryAxis y_axis = new CategoryAxis(); y_axis.setCategories(FXCollections.observableArrayList("First", "Second", "Third"));; ScatterChart chart = new ScatterChart(x_axis, y_axis); int width = 300; int height = 300; chart.setMaxSize(width, height); chart.setPrefSize(width, height); chart.setTitle("ScatterChart"); chart.setStyle("-fx-border-color: darkgray;"); return chart; } void addSeries(ScatterChart chart, Series s) { chart.getData().add(s); } public static void main(String[] args) { launch(args); } }