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中运行良好。
有人能找到我的原因吗?
答案 0 :(得分:0)
JKostikiadis在the comment中的建议:
...您可以通过在for循环之后和
container.layout();
之前添加stage.setScene(pie);
来修复该错误,以强制VBox布置其子级
帮助了我。