javafx PieChart标签中的Java9错误

时间:2018-04-15 15:15:23

标签: javafx java-8 pie-chart java-9 javafx-9

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

使用上面的代码,它首先显示带有按钮&#34; pie&#34;的舞台。单击该按钮会显示带有按钮的饼图&#34;返回&#34;。后退按钮用于返回初始屏幕。

此代码中的问题是,在第二次显示饼图后,饼图的标签突然被塞满。

可以看到

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

我可以看到存在问题,但我无法真正看到原因。此外,这个问题只出现在java9中;它在java8中运行良好。

有人能找到我的原因吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

JKostikiadisthe comment中的建议:

...您可以通过在for循环之后和container.layout();之前添加stage.setScene(pie);来修复该错误,以强制VBox布置其子级

帮助了我。