Ошибка Java9 в метках javafx PieChart

 import javafx.application.Application;
 import javafx.geometry.Pos;
 import javafx.scene.Scene;
 import javafx.scene.chart.PieChart;
 import javafx.scene.control.Button;
 import javafx.scene.layout.BorderPane;
 import javafx.scene.layout.VBox;
 import javafx.stage.Stage;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;

 public class Main extends Application {
@Override
public void start(Stage stage) {
    try {
        Scene pie;
        Scene begin;
        //pie scene
        ObservableList<PieChart.Data> pieChartData=FXCollections.observableArrayList();
        PieChart pieChart = new PieChart(pieChartData);
        Button btBack = new Button("Back");
        pieChart.setTitle("Test");
        VBox container = new VBox(20);
        container.getChildren().addAll(pieChart,btBack);
        container.setAlignment(Pos.CENTER);
        BorderPane pane = new BorderPane();
        pane.setCenter(container);
        pie =new Scene(pane,800,600);

        //begin scene
        VBox container2 = new VBox(20);
        Button btPie = new Button("pie");
        container2.getChildren().add(btPie);
        BorderPane pane2 = new BorderPane();
        container2.setAlignment(Pos.CENTER);
        pane2.setCenter(container2);
        begin=new Scene(pane2,50,50);


        //handler
        btPie.setOnAction(e->{
            pieChartData.clear();
            for(int i=0;i<5;++i)
            pieChartData.add(new PieChart.Data(""+i, i));
            stage.setScene(pie);
        });
        btBack.setOnAction(e->stage.setScene(begin));

        stage.setScene(begin);
        stage.show();

    } catch (Exception e) {

        e.printStackTrace(); // exception handling: print the error message on the console
    }
}

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

С помощью приведенного выше кода он сначала показывает сцену с помощью кнопки "пирог". При нажатии на кнопку отображается круговая диаграмма с кнопкой "назад". Кнопка "Назад" используется для возврата к начальному экрану.

Проблема в этом коде состоит в том, что после повторного показа круговой диаграммы метки круговой диаграммы внезапно забиваются.

Это можно увидеть с

 1. click pie
 2. click back
 3. click pie -> problem shown

Я вижу, что есть проблема, но я не вижу причины. Кроме того, эта проблема возникает только в java9; это хорошо работает в Java8.

Может кто-нибудь найти мне причину, пожалуйста?

0 ответов

Предложение JKostikiadis в комментарии:

... вы можете исправить ошибку, добавив container.layout(); после цикла for и перед stage.setScene(pie); чтобы заставить VBox размещать своих дочерних элементов

помог мне.

Другие вопросы по тегам