2015-04-14 22 views
0

我目前正在嘗試創建一個圖表,該圖表允許我重新啓動x軸並繼續繪圖。軸範圍是0-100,但是當圖形達到100時,需要以下值再次爲0.但是,什麼使得圖表返回到初始零點。如何重新創建NumberAxis並移至JavaFX LineChart中的下一個值?

在接下來的兩張圖片中我將展示如何在當前的圖表上工作。

enter image description here

什麼使圖表返回到最初的零和繼續。 what makes the chart is to be returned to the initial zero.

我需要的是這樣的: enter image description here

非常感謝您的幫助!

回答

1

可以利用axis.setTickLabelFormatter()格式化刻度標籤:

public class TickLabelFormatterDemo extends Application 
{ 

    private static final int RANGE = 100; 
    private int last_X_Axis_Val = 20; 


    @Override 
    public void start(Stage stage) 
    { 
     stage.setTitle("Sample"); 

     final NumberAxis xAxis = new NumberAxis(); 
     final NumberAxis yAxis = new NumberAxis(); 
     xAxis.setForceZeroInRange(false); 
     xAxis.setTickLabelFormatter(new StringConverter<Number>() 
     { 

      @Override 
      public String toString(Number object) 
      { 
       int i = object.intValue() % RANGE; 
       return String.valueOf(i == 0 ? RANGE : i); 
      } 

      @Override 
      public Number fromString(String string) 
      { 
       return null; 
      } 
     }); 

     final LineChart<Number, Number> lineChart 
       = new LineChart<>(xAxis, yAxis); 

     lineChart.setTitle("Monitoring"); 
     XYChart.Series series = new XYChart.Series(); 
     series.setName("Values"); 

     Random random = new Random(); 

     Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(2), new EventHandler<ActionEvent>() 
     { 
      @Override 
      public void handle(ActionEvent event) 
      { 
       if (series.getData().size() > 5) 
       { 
        series.getData().remove(0); 
       } 
       series.getData().add(new XYChart.Data(last_X_Axis_Val, random.nextInt(50))); 
       last_X_Axis_Val += 20; 
      } 
     })); 
     timeline.setCycleCount(Timeline.INDEFINITE); 
     timeline.play(); 

     Scene scene = new Scene(lineChart, 800, 600); 
     lineChart.getData().add(series); 

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


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

}