在单个 hbox 中给 2 个元素单独对齐
Giving 2 elements seperate alignments in a single hbox
我正在尝试让 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 将两个元素推到左侧,彼此相邻。
我的项目现在需要 borderpane 布局,但就目前而言,有没有办法强制标签 tst 留在 hbox 的最右边,而 bt1 留在最左边?
我也可以 css,如果 -fx-stylesheet 的东西是这样的话。
您需要将左侧节点添加到 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);
}
}
根据 JavaDoc,当您在 Button
或 Label
上调用 setAlignment()
时:
Specifies how the text and graphic within the Labeled should be
aligned when there is empty space within the Labeled.
所以它只是文本在 Button
或 Label
中的一个位置。但是你需要的是将你的 Button
或 Label
包裹在一些容器中(比如 HBox
)并使其填充所有可用的 space(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);
我正在尝试让 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 将两个元素推到左侧,彼此相邻。
我的项目现在需要 borderpane 布局,但就目前而言,有没有办法强制标签 tst 留在 hbox 的最右边,而 bt1 留在最左边?
我也可以 css,如果 -fx-stylesheet 的东西是这样的话。
您需要将左侧节点添加到 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);
}
}
根据 JavaDoc,当您在 Button
或 Label
上调用 setAlignment()
时:
Specifies how the text and graphic within the Labeled should be aligned when there is empty space within the Labeled.
所以它只是文本在 Button
或 Label
中的一个位置。但是你需要的是将你的 Button
或 Label
包裹在一些容器中(比如 HBox
)并使其填充所有可用的 space(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);