2014-02-27 2 views
1

그래서 분산 형 차트와 같은 임의의 JavaFX XY 차트를 생성하려고합니다. netbeans 7.4를 사용하고 있습니다.임의로 JavaFX xyCharts를 프로그래밍 방식으로 생성하는 방법

나는 데이터를 무작위로 추출하고 시리즈 수를 무작위로 지정하고 싶습니다. 이미 무작위 데이터를 추가했지만 사용 된 시리즈 수를 무작위로 추출하는 방법을 모르겠습니다. 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); 
    } 

} 

답변

1

당신은이 같은 for 루프에 시리즈 개체의 임의의 숫자를 생성하기 위해 최선을 다해 줄 그런 다음

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 루프 내에서이를 수행 할 수 있음). 당신은 쉽게 이런를위한 각 루프마다 시리즈를 반복 할 수 있습니다

당신이 ArrayList를를 사용하는 가져 했는가 패키지
for(XYChart.Series series:seriesList){ 
    series.getData().add(...); 
    ... 
} 
+0

? 또한 ArrayList seriesList = new ArrayList ()와 같은 것을 의미한다고 생각합니다. 비록 내가 제안하고있는 것과 당신이 그 라인을 위해 가지고있는 것이 모두 나를위한 에러 메시지와 함께 튀어 나오더라도 ... – user3003304

+0

나는 그것이 단지 intellisense 인 바른 이전 코멘트에 추가 된 코드에서 작동하도록했다. 나중에 시리즈에 번호를 추가 할 수 있다는 것이 무슨 뜻인지 잘 모르겠지만. 시리즈가 series1, series2, ... seriesN과 같은 방식으로 분리되어 있는지 확인하는 방법을 100 % 확신 할 수는 없습니다. 나는 그 (것)들에 이름을 붙이기 만하면, 나는 그 시리즈를 추가하여 차트에 추가 할 때 다른 시리즈를 추가 할 수 있도록 식별하는 것을 의미합니다. – user3003304

+0

@ user3003304 무슨 뜻인지 모르겠습니다. List, Array 또는 ArrayList의 개념을 이해하고 있습니까? 당신이 각 변수에 ** 이름 **을주고 싶어하는 것처럼 들리지만, 그것은 정말로 필요하지 않습니다. 필요한 것은 그 메모리에 대한 포인터 뿐이며, 배열 목록에 원하는 수만큼 저장할 수 있습니다. – Luke

관련 문제