Ошибка 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 размещать своих дочерних элементов
помог мне.