gpt4 book ai didi

layout - JavaFX VBox 和 HBox 布局

转载 作者:行者123 更新时间:2023-12-03 23:47:26 27 4
gpt4 key购买 nike

我正在处理 JavaFX具有从外部数据结构生成的布局的应用程序,由

  • 显示知道自己纵横比的组件(高度取决于宽度)
  • 2种结构部件
  • 以相同的宽度在页面上显示所有子项,每个子项根据需要增加垂直空间
  • 使用全宽显示页面下方的所有子项,并根据需要占用尽可能多的垂直空间

  • 但我发现事情并没有像我预期的那样显示。我做了一个简单的案例来演示这个问题。

    代码如下,问题是 v3没有显示出来,我一生都无法弄清楚原因。我猜 VBox 有一些方面es 和 HBox是我没看懂的。

    我真的很感激任何帮助或想法。提前致谢!
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.Priority;
    import javafx.scene.layout.Region;
    import javafx.scene.layout.VBox;
    import javafx.scene.paint.Color;
    import javafx.scene.shape.Rectangle;
    import javafx.stage.Stage;

    import java.util.Random;

    public class Test extends Application {

    static Random rand = new Random();

    public static void main(String args[]) {
    Application.launch("something");
    }

    @Override
    public void start(Stage mainStage) throws Exception {
    testVBoxes(mainStage);
    }

    private void testVBoxes(Stage mainStage) {
    VBox root = new VBox();
    Scene one = new Scene(root, 800, 600, Color.WHITE);

    FixedAspectRatioH h1 = new FixedAspectRatioH();
    FixedAspectRatioH h2 = new FixedAspectRatioH();
    FixedAspectRatioH h3 = new FixedAspectRatioH();
    FixedAspectRatioV v1 = new FixedAspectRatioV();
    FixedAspectRatioV v2 = new FixedAspectRatioV();
    FixedAspectRatioV v3 = new FixedAspectRatioV();

    h1.prefWidthProperty().bind(root.widthProperty());

    h2.add(v2);

    v1.add(h3);
    v1.add(h2);

    h1.add(v1);
    h1.add(v3);

    root.getChildren().add(h1);

    mainStage.setScene(one);
    mainStage.show();
    }

    private class FixedAspectRatioV extends VBox {
    public FixedAspectRatioV() {
    Rectangle r = new Rectangle();
    r.setFill(Color.rgb(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256)));
    r.widthProperty().bind(widthProperty());
    r.heightProperty().bind(r.widthProperty().divide(3));
    getChildren().add(r);
    }

    public void add(Region n) {
    n.prefWidthProperty().bind(widthProperty());
    getChildren().add(n);
    }
    }

    private class FixedAspectRatioH extends HBox {
    public FixedAspectRatioH() {
    Rectangle r = new Rectangle();
    r.setFill(Color.rgb(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256)));
    r.widthProperty().bind(widthProperty().divide(4));
    r.heightProperty().bind(r.widthProperty());
    getChildren().add(r);
    }

    public void add(Region n) {
    HBox.setHgrow(n, Priority.ALWAYS);
    getChildren().add(n);
    }
    }
    }

    最佳答案

    它是 2 年,但解决方案是您忘记了

    Node.setPrefSize(width,height);

    并将其添加到您的构造函数 Hbox.setFillHeight(true);

    关于layout - JavaFX VBox 和 HBox 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15302961/

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