gpt4 book ai didi

java - 在 JavaFX 中包装内容

转载 作者:行者123 更新时间:2023-12-05 08:57:46 25 4
gpt4 key购买 nike

package example;

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class Main extends Application {

@Override
public void start(Stage primaryStage) {
Text text = new Text("This is a Text");

VBox box = new VBox();
box.setAlignment(Pos.CENTER);
box.setStyle("-fx-background-color: yellow;");
box.getChildren().add(text);

StackPane container = new StackPane();
container.getChildren().add(box);

BorderPane bp = new BorderPane();
bp.setCenter(container);

Scene scene = new Scene(bp, 300, 250);

primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}

}

这是输出:

The output of the above code

问题:谁能给我解释一下为什么 Vbox 会填满整个屏幕?有没有类似Android的wrap_content的方法?我想要下面的图像作为输出:

enter image description here

最佳答案

解决方案

将 VBox 包裹在 Group 中;例如使用:

container.getChildren().add(new Group(box));

代替:

container.getChildren().add(box);

为什么有效

来自组 javadoc:

By default, a Group will "auto-size" its managed resizable children to their preferred sizes during the layout pass.

这意味着 VBox 不会增长到超过其内容的首选大小(这刚好足以显示其中的标签)。

替代实现

将 VBox 的最大大小设置为首选大小。然后 VBox 只会增长到足以适应其中内容的首选大小,并且永远不会增长。

box.setMaxSize(VBox.USE_PREF_SIZE, VBox.USE_PREF_SIZE);

为什么 VBox 默认增长

这是一个resizable container它将拉伸(stretch)以填充可用区域。

注意

我不知道效果是否与我从未为 Android 开发过的 Android wrap_content 方法完全相同,但是效果似乎确实与您在问题中提供的第二张图片完全匹配,这似乎是什么你想要的。

关于java - 在 JavaFX 中包装内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29504568/

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