【问题标题】:How to programatically generate random JavaFX xyCharts如何以编程方式生成随机 JavaFX xyChart
【发布时间】:2014-03-31 12:25:05
【问题描述】:

所以我想生成随机的 JavaFX XY 图表,例如散点图。我正在使用netbeans 7.4。

我想随机化输入的数据,我也想随机化系列的数量。我已经添加了随机数据,但我不知道如何随机化使用的系列数量。我计划使用 series1、series2、...、seriesN 的命名约定。我只是不知道该怎么做。

package basicscatter;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.ScatterChart;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;
import java.util.Random;

public class BasicScatter extends Application 
{

    @Override public void start(Stage stage)
    {
        stage.setTitle("Basic Scatter Chart");
        final NumberAxis xAxis = new NumberAxis(0,50,5); //(start,end,step).
        final NumberAxis yAxis = new NumberAxis(0,1000,100);
        int count = 0;
        int NumEntries;
        int totalNumberOfSeries;
        int x; 
        int y;
        Random randomNumbers = new Random();

        final ScatterChart<Number,Number> sc = new ScatterChart<Number,Number>(xAxis,yAxis);
        xAxis.setLabel("X Axis");
        yAxis.setLabel("Y Axis"); 
        sc.setTitle("This is my Chart's Label");
        totalNumberOfSeries = 1 + randomNumbers.nextInt(10);

 //would like to generate random Series here instead of hardcoding the series
        XYChart.Series series1 = new XYChart.Series();
        XYChart.Series series2 = new XYChart.Series();

        series1.setName("series 1");
        series2.setName("series 2");

        NumEntries = 1 + randomNumbers.nextInt(100);

        while(count < NumEntries)
        {
            x = randomNumbers.nextInt(51);
            y = randomNumbers.nextInt(1001);
            series1.getData().add(new XYChart.Data(x,y));
            count++;
        }

        NumEntries = 1 + randomNumbers.nextInt(100);
        count = 0;

        while(count < NumEntries)
        {
            x = randomNumbers.nextInt(51);
            y = randomNumbers.nextInt(1001);
            series2.getData().add(new XYChart.Data(x,y));
            count++;
        }


        sc.getData().addAll(series1, series2);
        Scene scene = new Scene(sc, 500, 400);
        scene.getStylesheets().add(BasicScatter.class.getResource("Testcss.css").toExternalForm());
        stage.setScene(scene);
        stage.show();
    }


    public static void main(String[] args)
    {
        launch(args);
    }

}

【问题讨论】:

    标签: java random javafx series scatter


    【解决方案1】:

    您最好在 for 循环中生成随机数量的 Series 对象,如下所示:

    List<XYChart.Series> seriesList = new ArrayList<Series>
    int randomCount = randomNumbers.nextInt(100);
    for(int i=0;i<randomCount;i++){
       XYChart.Series series = new XYChart.Series();
       series.setName("series " + randomCount);
       seriesList.add(series);
    }
    

    然后您可以遍历所有系列并向它们添加数字(或者您可以在上面的 for 循环中执行此操作)。您可以使用这样的 for-each 循环轻松迭代每个系列:

    for(XYChart.Series series:seriesList){
        series.getData().add(...);
        ...
    }
    

    【讨论】:

    • 你导入了什么包来使用ArrayList?另外我认为您的意思是 ArrayList seriesList = new ArrayList();尽管我的建议和您对该行的内容都会弹出错误消息给我...
    • 所以我让它为我在之前评论中添加的代码工作,只是智能感知很愚蠢。虽然我不确定你以后能够在系列中添加数字是什么意思。我不是 100% 确定如何确保系列以定义为 series1、series2、...seriesN 的方式分离。我给它们命名,我只是想识别它们,这样当我将系列添加到图表时,我就可以添加不同的系列。
    • @user3003304 我不确定你的意思。您了解 List、Array 或 ArrayList 的概念吗?听起来您想给每个变量一个 name,但这并不是真正必要的。您所需要的只是一个指向该内存的指针,并且您可以将任意数量的它们(在合理范围内)存储在一个数组列表中。
    • 直到现在我才知道我可以用系列和图表做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    相关资源
    最近更新 更多