gpt4 book ai didi

java - 在 JavaFX 中使标签占据 HBox 上的所有可用空间

转载 作者:行者123 更新时间:2023-12-03 07:50:25 27 4
gpt4 key购买 nike

在 JavaFX 21 中,我希望 HBox 包含 3 个元素、一个标签和两个按钮。

HBox rowBox = new HBox ( label , buttonX , buttonY );

默认情况下,小部件全部堆积在左侧。

就像这样,只有很少的文本,如果我们想象我的外部方括号是 HBox 边界,内部方括号是每个按钮的边界:

[ Short text. [ buttonX ] [ buttonY] ]

...或者更多文字:

[ Or lots and lots and lots of text. [ buttonX ] [ buttonY] ]

但我希望这两个按钮始终位于最右侧,如下所示:

[ Short text. [ buttonX ] [ buttonY] ]

[ Or lots and lots and lots of text. [ buttonX ] [ buttonY] ]

我试过HBox.setHgrow :

HBox.setHgrow ( label , Priority.ALWAYS );

…但是这样的效果并没有给我带来任何好处——元素保持在相同的位置。相反,我希望盒子的所有未分配空间都达到标签的宽度。我希望标签将两个按钮“推”到框的右侧。

我正在尝试使用单个 HBox 来完成此布局,以便我可以沿着文本的基线整齐地对齐小部件。

rowBox.setAlignment ( Pos.BASELINE_LEFT );

👉🏼 有没有办法将所有额外空间分配给标签?

如果没有,是否有其他方法可以将此按钮置于正确的布局?

最佳答案

在 JavaFX 中,要实现您所描述的布局(其中两个按钮始终位于最右侧并且标签占据所有剩余空间),您可以使用 HBox 的组合, RegionHBox.setHgrow

方法如下:

  1. 创建一个区域,用作标签和按钮之间的间隔。
  2. 使用HBox.setHgrow使Region占据所有可用空间。

这是一个代码示例:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.stage.Stage;

public class Main extends Application {

@Override
public void start(Stage primaryStage) {
Label label = new Label("Or lots and lots and lots of text.");

Button buttonX = new Button("buttonX");
Button buttonY = new Button("buttonY");

// Create a region to act as a horizontal spacer
Region spacer = new Region();

// Make the spacer Region expand as much as possible
HBox.setHgrow(spacer, Priority.ALWAYS);

HBox hbox = new HBox(label, spacer, buttonX, buttonY);

Scene scene = new Scene(hbox, 400, 100);

primaryStage.setScene(scene);
primaryStage.show();
}

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

在此示例中,名为 spacerRegion 将占据 HBox 中所有额外的水平空间,将按钮推向远处正确的。标签将仅占用其文本所需的空间,而 spacer 会填充剩余空间。这可确保您的按钮始终位于最右侧,而不管标签的宽度如何。

关于java - 在 JavaFX 中使标签占据 HBox 上的所有可用空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77299333/

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