Alimur Razi Rana
Alimur Razi Rana

Reputation: 87

How to connect two points in javaFX in two-axis chart

In JavaFX line chart, a type of two-axis chart that presents data as a series of points connected by straight lines. All points are connected with one line. But I want to connect them with my order . Like there are three points p1(x1,y1), p2(x2,y2), p3(x3,y3) . In line chart, they are all connected with a single line , but I want connect p1,p3 and p1,p2 separately . How can I do that ? X-axis and Y-axis must present there .

Upvotes: 2

Views: 928

Answers (2)

SedJ601
SedJ601

Reputation: 13859

I improved on @Adam answer to address your new probem:

@Override
public void start(Stage primaryStage) throws Exception {
    NumberAxis xAxis1 = new NumberAxis();
    NumberAxis yAxis1 = new NumberAxis();
    LineChart<Number, Number> chart = new LineChart<Number, Number>(xAxis1, yAxis1);

    Random random = new Random();

    ArrayList<Series<Number, Number>> seriesContainer = new ArrayList();

    for(int i = 0; i < 10; i++)
    {
        Series<Number, Number> series1 = new Series<>();
        series1.getData().add(new XYChart.Data<>(random.nextDouble() * 100, random.nextDouble() * 100));
        series1.getData().add(new XYChart.Data<>(random.nextDouble() * 100, random.nextDouble() * 100));
        seriesContainer.add(series1);            
    }
    chart.getData().addAll(seriesContainer);    

    primaryStage.setScene(new Scene(chart));
    primaryStage.show();

}

Upvotes: 1

Adam
Adam

Reputation: 36723

By default JavaFX will join all points in a series. Simply solution is to use multiple series. Note you cannot share Data instances between series because Data stores a back-reference to the Node - see javafx.scene.chart.XYChart.Data.getNode()

@Override
public void start(Stage primaryStage) throws Exception {
    NumberAxis xAxis1 = new NumberAxis();
    NumberAxis yAxis1 = new NumberAxis();
    LineChart<Number, Number> chart = new LineChart<Number, Number>(xAxis1, yAxis1);

    double p1x = 0;
    double p1y = 0;
    double p2x = 5;
    double p2y = 5;
    double p3x = 3;
    double p3y = 5;

    Series<Number, Number> series1 = new Series<>();
    series1.getData().add(new Data<>(p1x, p1y));
    series1.getData().add(new Data<>(p2x, p2y));
    chart.getData().add(series1);

    Series<Number, Number> series2 = new Series<>();
    series2.getData().add(new Data<>(p2x, p2y));
    series2.getData().add(new Data<>(p3x, p3y));
    chart.getData().add(series2);

    primaryStage.setScene(new Scene(chart));
    primaryStage.show();

}

Upvotes: 2

Related Questions