0

我正在尝试获取 2 个元素,一个按钮和一个标签,以便在 javafx 中的单个 HBox 中拥有自己的单独对齐方式。到目前为止我的代码:

Button bt1= new Button("left");
bt1.setAlignment(Pos.BASELINE_LEFT);

Label tst= new Label("right");
tst.setAlignment(Pos.BASELINE_RIGHT);

BorderPane barLayout = new BorderPane();
HBox bottomb = new HBox(20);
barLayout.setBottom(bottomb);
bottomb.getChildren().addAll(bt1, tst);

默认情况下,hbox 将两个元素推到左边,彼此相邻。

我的项目现在需要边框布局,但就目前而言,有没有办法强制标签 tst 留在 hbox 的最右边,而 bt1 留在最左边?

如果 -fx-stylesheet 的东西以这种方式工作,我也可以做 css。

4

2 回答 2

2

您需要将左侧节点添加到 AnchorPane 并使该 AnchorPane 水平增长。

import javafx.application.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.*;

/**
 *
 * @author Sedrick
 */
public class JavaFXApplication33 extends Application {

    @Override
    public void start(Stage primaryStage)
    {
        BorderPane bp = new BorderPane();
        HBox hbox = new HBox();
        bp.setBottom(hbox);

        Button btnLeft = new Button("Left");
        Label lblRight = new Label("Right");

        AnchorPane apLeft = new AnchorPane();
        HBox.setHgrow(apLeft, Priority.ALWAYS);//Make AnchorPane apLeft grow horizontally
        AnchorPane apRight = new AnchorPane();
        hbox.getChildren().add(apLeft);
        hbox.getChildren().add(apRight);

        apLeft.getChildren().add(btnLeft);
        apRight.getChildren().add(lblRight);

        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);
    }

}

在此处输入图像描述

于 2017-04-22T19:27:36.753 回答
1

当您根据 JavaDoc 调用setAlignment()或调用它时ButtonLabel

指定当 Labeled 中有空白空间时,Labeled 中的文本和图形应如何对齐。

所以它只是你的Button或中文本的位置Label。但是您需要将您的Buttonor包裹Label在某个容器内(比如说HBox)并使其填满所有可用空间(HBox.setHgrow(..., Priority.ALWAYS)):

Button bt1= new Button("left");
HBox bt1Box = new HBox(bt1);
HBox.setHgrow(bt1Box, Priority.ALWAYS);

Label tst= new Label("right");

BorderPane barLayout = new BorderPane();
HBox bottomb = new HBox(20);
barLayout.setBottom(bottomb);
bottomb.getChildren().addAll(bt1Box, tst);
于 2017-04-22T19:42:26.593 回答