gpt4 book ai didi

JavaFX - 修改子节点大小后更新 BorderPane 的大小

转载 作者:行者123 更新时间:2023-12-01 22:30:54 24 4
gpt4 key购买 nike

我有一个 BorderPane,其中心有一个 Canvas,并且我希望在更改 Canvas 大小时,BorderPane 始终环绕 Canvas 。以这段代码为例:

public class Test extends Application {

public void start(Stage primaryStage) {
BorderPane root = new BorderPane();

Canvas canvas = new Canvas(10, 10);
root.setCenter(canvas);

Scene s = new Scene(root);

primaryStage.setScene(s);
primaryStage.show();

canvas.setWidth(100);
canvas.setHeight(100);
}

public static void main(String[] args) {launch(args);}

我希望在 Canvas 上调用 setWidth 和 setHeight 方法后,BorderPane 更改其大小,但它只是保持相同的大小,就好像 Canvas 仍然是 (10,10) 大一样。我该怎么做?

最佳答案

问题在于您的 BorderPane 是应用程序 Scene 的根。 Scene 的根容器不会(至少不会自动)变得比其包含的 Scene 更大。

看看这个示例应用程序:

public class Main extends Application {

@Override
public void start(Stage primaryStage) {

Canvas canvas = new Canvas(0, 0);
Button button = new Button("test");
button.setOnAction(ev -> {
canvas.setWidth(canvas.getWidth() + 10);
canvas.setHeight(canvas.getHeight() + 10);
canvas.getGraphicsContext2D().clearRect(0, 0, canvas.getWidth(), canvas.getHeight());
canvas.getGraphicsContext2D().fillRect(0, 0, canvas.getWidth(), canvas.getHeight());
});

BorderPane canvasBorderPane = new BorderPane(canvas);
canvasBorderPane.setPadding(new Insets(10));
canvasBorderPane.setBackground(new Background(new BackgroundFill(Color.RED, new CornerRadii(0), Insets.EMPTY)));

BorderPane root = new BorderPane(canvasBorderPane);
root.setPadding(new Insets(10));
root.setBackground(new Background(new BackgroundFill(Color.BLUE, new CornerRadii(0), Insets.EMPTY)));
root.setBottom(button);
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
}

我将两个 BorderPane 堆叠在一起,并将 Canvas 放在最里面,应用了一些背景颜色,以便您可以看到发生了什么。

关于JavaFX - 修改子节点大小后更新 BorderPane 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27771862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com