gpt4 book ai didi

javafx vbox 和 gridpane

转载 作者:行者123 更新时间:2023-12-02 01:10:09 25 4
gpt4 key购买 nike

问题:我对 vbox 和 gridpane 之间有一个困惑。通常当你可以使用 vbox 时,你也可以使用 1 列和 n 行的 gridPane,所以我不确定何时使用它们和区别。

事实:

  • 我知道网格 Pane 有 n 行和 n 列。

  • 我知道 vbox 只会垂直列出组件。 (n行1列)

困惑:当我说我想垂直列出 40-50 个(水平框或其他组件)时,我不知道该选择哪个,因为有时我看到人们添加这些组件作为子项进入 vbox,其他人将使用 gridpane n(rows)x1(column) 并且始终动态创建行约束。

更多:在java swing中,我会使用gridBagLayout,因为在我的例子中,它是唯一受益于约束功能的布局,因为这些组件具有不同的高度。但是,在 javafx 中,我仍然可以将不同大小的组件放入 vbox 中使用 gridPane,它是 java swing 中 gridbaglayout 的替代品。

摘要:

在swing中gridbaglayout是唯一的解决方案,在javafx vbox或gridpane中(替代swing中的gridbaglayout)?

------编辑------

当我将水平盒子放入网格 Pane 单元格中时,盒子内的组件会调整大小,但是,当我将水平盒子放入垂直盒子中时,它们不会调整大小。

示例:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>

<VBox maxHeight="1080.0" maxWidth="1920.0" minHeight="600.0" minWidth="800.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1">
<children>
<ScrollPane hbarPolicy="NEVER">
<content>
<VBox>
<children>
<HBox alignment="CENTER_LEFT" maxHeight="50.0" maxWidth="350.0" minHeight="50.0" minWidth="250.0" spacing="10.0">
<children>
<Label text="label">
<HBox.margin>
<Insets left="10.0" />
</HBox.margin>
</Label>
<TextField />
<ImageView fitHeight="24.0" fitWidth="24.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="" />
</image>
<HBox.margin>
<Insets right="10.0" />
</HBox.margin>
</ImageView>
</children>
</HBox>
<HBox alignment="CENTER_LEFT" maxHeight="50.0" maxWidth="350.0" minHeight="50.0" minWidth="250.0" spacing="10.0">
<children>
<Label text="another label">
<HBox.margin>
<Insets left="10.0" />
</HBox.margin>
</Label>
<TextField />
<ImageView fitHeight="24.0" fitWidth="24.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="" />
</image>
<HBox.margin>
<Insets right="10.0" />
</HBox.margin>
</ImageView>
</children>
</HBox>
</children>
</VBox>
</content>
</ScrollPane>
</children>
</VBox>

为什么组件没有根据水平盒的当前大小调整大小?

最佳答案

使用VBox,除非您需要仅由GridPane提供的功能。为 VBox 指定的布局参数较少,这使其更易于使用并减少潜在的错误源。此外,使用 GridPane 进行布局的成本更高,这可能会减慢经常更改节点大小的应用程序的更新速度。

有些事情你无法使用 VBox 实现(至少不能以方便的方式实现):

  • 将多个子项放置在同一个“单元格”中(可以通过将这些子项包装在另一个布局中来完成)
  • 行跨度
  • 指定“行”的相对大小(可以通过绑定(bind)子项的 prefHeight 属性来完成,但使用 GridPane 更干净)
  • 子元素在“单元格”中的对齐
  • 将“单元格”留空(可以应用边距来完成,但这对于相对高度来说会变得复杂)
  • ...

关于javafx vbox 和 gridpane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59519506/

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