Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8209172

JavaFx Chart unrefresh in subscene with Oracle JDK10

XMLWordPrintable

    • x86_64
    • generic

      A DESCRIPTION OF THE PROBLEM :
      I write a JavaFX Demo to add a bar chart in Subscene and change the bar chart series value in KeyFrame in Timeline.

      In Oracle JDK8, the bar chart graphic refresh correct,But in Oracle JDK 10,the bar chart graphic do not refresh.

      I tried Platform.requestNextPulse,but it donot useful.

      import javafx.animation.Animation;
      import javafx.animation.KeyFrame;
      import javafx.animation.Timeline;
      import javafx.application.Application;
      import javafx.collections.FXCollections;
      import javafx.collections.ObservableList;
      import javafx.event.ActionEvent;
      import javafx.event.EventHandler;
      import javafx.geometry.Rectangle2D;
      import javafx.scene.*;
      import javafx.scene.chart.BarChart;
      import javafx.scene.chart.CategoryAxis;
      import javafx.scene.chart.NumberAxis;
      import javafx.scene.chart.XYChart;
      import javafx.scene.paint.Color;
      import javafx.stage.Screen;
      import javafx.stage.Stage;
      import javafx.util.Duration;


      public class HMIBrowserDemoTest extends Application {

          private Scene backScene=new Scene(new Group());

          SubScene subScene =null;

          private Group picGroup=null;


          public HMIBrowserDemoTest(){
              super();
          }

          private void initUI(Stage primaryStage) {

              Rectangle2D screenBounds=Screen.getPrimary().getBounds();
              primaryStage.setWidth(screenBounds.getWidth());
              primaryStage.setHeight(screenBounds.getHeight());
              primaryStage.centerOnScreen();

              primaryStage.setTitle("hmi.browser.title");

              primaryStage.setScene(backScene);

              Group rootGroup=(Group) backScene.getRoot();

              Group aa=new Group();
              aa.getChildren().add(createContent1());
              subScene =new SubScene(aa,800,700);
              subScene.setFill(Color.BEIGE);
              subScene.setManaged(false);

              rootGroup.getChildren().add(subScene);
          }

          @Override
          public void start(Stage primaryStage) throws Exception {
              initUI(primaryStage);
              primaryStage.show();

              init1();
          }

          public static void main(String[] args) {
              System.out.println(System.getProperty("java.library.path"));
              launch(args);
          }



          private void init1(){
              Timeline tl = new Timeline();
              tl.getKeyFrames().add(
                      new KeyFrame(Duration.millis(150),
                              new EventHandler<ActionEvent>() {
                                  @Override
                                  public void handle(ActionEvent actionEvent) {
                                      XYChart.Series series= (XYChart.Series) chart.getData().get(0);
                                      int value= (int) (Math.random() * 5000);
                                      XYChart.Data<String, Number> data= (XYChart.Data<String, Number>) series.getData().get(0);
                                      System.out.println(value+"-----------");
                                      data.setYValue(value);
                                      subScene.toFront();
                                  }
                              }
                      ));
              tl.setCycleCount(Animation.INDEFINITE);
              tl.setAutoReverse(true);
              tl.play();
          }

          private BarChart chart;
          private CategoryAxis xAxis;
          private NumberAxis yAxis;
          public Parent createContent1() {
              String[] years = {"2007", "2008", "2009"};
              xAxis = new CategoryAxis();
              xAxis.setCategories(FXCollections.<String>observableArrayList(years));
              yAxis = new NumberAxis("Units Sold", 0.0d, 3000.0d, 1000.0d);
              ObservableList<BarChart.Series> barChartData = FXCollections.observableArrayList(
                      new BarChart.Series("Apples", FXCollections.observableArrayList(
                              new BarChart.Data(years[0], 567d),
                              new BarChart.Data(years[1], 1292d),
                              new BarChart.Data(years[2], 1292d)
                      )),
                      new BarChart.Series("Lemons", FXCollections.observableArrayList(
                              new BarChart.Data(years[0], 956),
                              new BarChart.Data(years[1], 1665),
                              new BarChart.Data(years[2], 2559)
                      )),
                      new BarChart.Series("Oranges", FXCollections.observableArrayList(
                              new BarChart.Data(years[0], 1154),
                              new BarChart.Data(years[1], 1927),
                              new BarChart.Data(years[2], 2774)
                      ))
              );
              chart = new BarChart(xAxis, yAxis, barChartData, 25.0d);
              chart.setLayoutX(0);
              chart.setLayoutY(0);
              chart.setPrefSize(300,300);
              return chart;
          }
      }

      REGRESSION : Last worked in version 10.0.2


      FREQUENCY : always


            Unassigned Unassigned
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated: