代码之家  ›  专栏  ›  技术社区  ›  user3003304

如何编程生成随机JavaFX xyCharts

  •  1
  • user3003304  · 技术社区  · 10 年前

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

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

    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);
        }
    
    }
    
    1 回复  |  直到 10 年前
        1
  •  1
  •   Luke SD.    10 年前

    最好在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(...);
        ...
    }