我有这个简单的例子。我想自动调整图表以填充父母。
@Override
public void start(Stage primaryStage)
{
FlowPane flowPane = new FlowPane(Orientation.HORIZONTAL);
flowPane.getChildren().addAll(test());
flowPane.setPadding(new Insets(5, 5, 5, 5));
flowPane.setStyle("-fx-background-color: green;");
//flowPane.setPrefWidth(1200);
flowPane.setVgap(4);
flowPane.setHgap(4);
flowPane.setAlignment(Pos.TOP_LEFT);
ScrollPane scroll = new ScrollPane();
scroll.setStyle("-fx-background-color: transparent;");
scroll.setHbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); // Horizontal scroll bar
scroll.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); // Vertical scroll bar
scroll.setFitToHeight(true);
scroll.setFitToWidth(true);
scroll.setContent(flowPane);
Scene scene = new Scene(scroll, 1500, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args)
{
launch(args);
}
private AreaChart<String, Number> test()
{
CategoryAxis xAxis = new CategoryAxis();
NumberAxis yAxis = new NumberAxis();
final AreaChart<String, Number> sc = new AreaChart<>(xAxis, yAxis);
sc.setAnimated(false); // Turn off chart animation during first appearance
sc.setCreateSymbols(false);
sc.setPrefSize(1200, 210);
return sc;
}
如何自动调整图表大小以填充父级大小?有没有绑定的简单解决方案?
你能提出一些解决方案吗?
答案 0 :(得分:0)
所以,既然你想用一张图表填充整个父母,我不认为有任何理由使用FlowPane
。最好使用StackPane
代替
public void start(Stage primaryStage)
{
StackPane stackPane = new StackPane();
AreaChart<String, Number> chart = test();
StackPane.setAlignment(chart, Pos.CENTER);
stackPane.getChildren().add(chart);
stackPane.setStyle("-fx-background-color: green");
// FlowPane flowPane = new FlowPane(Orientation.HORIZONTAL);
//
// flowPane.getChildren().addAll(test());
// flowPane.setPadding(new Insets(5, 5, 5, 5));
// flowPane.setStyle("-fx-background-color: green;");
// //flowPane.setPrefWidth(1200);
// flowPane.setVgap(4);
// flowPane.setHgap(4);
// flowPane.setAlignment(Pos.TOP_LEFT);
ScrollPane scroll = new ScrollPane();
scroll.setStyle("-fx-background-color: transparent;");
scroll.setHbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); // Horizontal scroll bar
scroll.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); // Vertical scroll bar
scroll.setFitToHeight(true);
scroll.setFitToWidth(true);
// scroll.setContent(flowPane);
scroll.setContent(stackPane);
Scene scene = new Scene(scroll, 1500, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
但是,如果您真的想使用FlowPane,那么您可以使用绑定。在你的情况下,它很容易。它只是简单的2行代码
chart.prefWidthProperty().bind(flowPane.widthProperty().subtract(10)); //substract 10 because of 5px insets on each side
chart.prefHeightProperty().bind(flowPane.heightProperty().subtract(10)); //same here
这里你只是说chart
的首选宽度和高度总是等于flowPane
的宽度和高度减去10(因为你的插图)