2016-03-20 19 views
0

Programımda bir javafx çizgi grafik var. Program her saniye 1-6 arasında bir rasgele değer üretir ve grafik üzerinde çizer. Böylece X ekseni saniye cinsinden zamanı temsil eder ve Y ekseni seçilen rastgele değeri temsil eder. Zaman geçtikçe grafiğin x ekseni üzerinde hareket ettirilmesine nasıl giderim? grafiğin doğru yönde ilerlemesi.JavaFX bir çizgi grafiğin Ekseni boyunca hareket ediyor

xAxis.setForceZeroInRange(false); 

Ve belli koşul karşılandığında sonra serisinden veri 0 (ilk bir) endeksli kaldırın:

public class MainDisplayController implements Initializable { 
LineChart<String,Number> lineChart; 

Timer timer = new Timer(); 
TimerTask task; 
Random dice = new Random(); 

@Override 
public void initialize(URL arg0, ResourceBundle arg1) { 


    XYChart.Series<String,Number> series = new XYChart.Series<String,Number>(); 



    series.getData().add(new XYChart.Data<String,Number>("1",0)); 

    lineChart.getData().add(series); 

    task = new TimerTask(){ 
     int secondsPassed = 0; 
     @Override 
     public void run() { 
      secondsPassed++; 
      System.out.println(secondsPassed); 
      int number; 
      number = 1+dice.nextInt(6); 
      series.getData().add(new XYChart.Data<String,Number>(String.valueOf(secondsPassed),number)); 
     } 

    }; 

    timer.scheduleAtFixedRate(task, 1000, 1000); 
} 

} 

cevap

0

Sana ayarlamayı deneyin gerektiğini düşünüyorum.

İşte benzer bir şey yapan bazı kodlar, umarım yardımcı olur. Bu çok

public class PointEverySecondLineChart extends Application { 
     private BorderPane root = new BorderPane(); 
     private Scene scene = new Scene(root,800,600); 

     private Random rand = new Random(); 

     private SimpleIntegerProperty 
       lastX = new SimpleIntegerProperty(0); 
     private XYChart.Series <Integer,Integer> mySeries; 
     private NumberAxis 
       xAxis = new NumberAxis(), 
       yAxis = new NumberAxis(); 
     private LineChart lineChart = new LineChart<>(xAxis,yAxis);  

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

     @Override 
     public void start(Stage primaryStage) { 
      Timeline addPointEverySecond = new Timeline(new KeyFrame(Duration.millis(500),event->{ 
       lastX.set(lastX.add(1).get()); 
       mySeries.getData().add(new XYChart.Data<>(lastX.get(), rand.nextInt(100))); 
       if (mySeries.getData().size()>10) mySeries.getData().remove(0); 
      })); 
      addPointEverySecond.setCycleCount(Timeline.INDEFINITE); 
      ObservableList <XYChart.Series<Integer,Integer>> data = FXCollections.observableArrayList(); 

      LineChart<Integer,Integer> chart = makeLineChart(data); 
      chart.setPrefWidth(600); 
      chart.setPrefHeight(600); 
      root.setCenter(chart); 

      Button btGo = new Button("GO!"); 
      btGo.setOnAction(action -> { 
       mySeries = new XYChart.Series<>(); 
       data.add(mySeries); 
       lastX.set(0); 
       addPointEverySecond.playFromStart(); 
      }); 

      btGo.disableProperty().bind(addPointEverySecond.statusProperty().isEqualTo(Animation.Status.RUNNING)); 
      root.setBottom(btGo);   

      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } 

     LineChart<Integer, Integer> makeLineChart(ObservableList <XYChart.Series<Integer,Integer>> series) { 
      xAxis.setForceZeroInRange(false); 
      lineChart.setCreateSymbols(false); 
      lineChart.setData(series); 
      return lineChart; 
     } 

    } 
+0

teşekkürler ben tam ihtiyacımız olan şey: D –

+0

Yani benim programa çözüm güçlendirme için denedim ama bunun bir String istediği değil bir şikayet, bana bu hata veriyor çalıştırmayı denediğinizde Tamsayı: İş parçacığı "JavaFX Uygulama iş parçacığı" özel durum java.lang.ClassCastException: java.lang.Integer java.lang.String için dönüştürülemiyor. –

+0

Ben bir CategoryAxis için X ekseni değiştirmeye çalıştım ama yok ' t setForceZeroInRange() yöntemine sahip olmak için grafiğe ulaşamıyorum, –

İlgili konular