Диаграмма JavaFx не обновляется в сцене с Oracle JDK10 - PullRequest
0 голосов
/ 01 июня 2018

Я пишу демонстрацию JavaFX, чтобы добавить гистограмму в Subscene и изменить значение ряда гистограмм в KeyFrame на временной шкале.

В Oracle JDK8 корректное обновление графической диаграммы гистограммы, но в Oracle JDK 10,график гистограммы не обновляется.

Я пробовал Platform.requestNextPulse, но это не помогло.

Извините за плохой английский.

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;
    }
}
...