4
 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中运行良好。

请问有人能帮我找出原因吗?

在此处输入图像描述

4

1 回答 1

1

JKostikiadis评论中的建议:

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

帮助过我。

于 2020-09-02T14:51:48.150 回答