JavaFX几种典型的布局策略

为了构造我们所需要的程序界面,我们会使用JavaFX提供的丰富的控件来实现这一目标。但是如何摆放这些控件的位置是一个重要的问题,JavaFX提供了一种特殊的控件,即面板Pane来解决这个问题,不同类型的面板采取不同的布局策略。我们可以根据实际的需要来选择不同的面板,从而构造出我们所需要的界面。下面就介绍几种常用的面板。

(一) FlowPane面板

它采用的布局策略是:按照控件的添加次序按个摆放,按照从上到下、从左到右的次序摆放。当窗口的大小发生变化后,场景的大小也自动跟着变化,面板的大小也跟着变化,并且会重新计算各个控件的位置,重新摆放各个控件的位置。

首先创建一个FlowPane对象,代码如下:

FlowPane pane = new FlowPane();

    pane.setPadding(new Insets(11, 12, 13, 14));

    pane.setHgap(5);//设置控件之间的垂直间隔距离

    pane.setVgap(5);//设置控件之间的水平间隔距离

创建两个标签对象、两个文本输入框和一个按钮对象,代码如下:

Label lbName = new Label("Please input a name:");

    TextField tfName = new TextField();

    Label lbPassword = new Label("Please input a password:");

    TextField tfPassword = new TextField();   

    Button okbtn = new Button("OK");

将这几个控件添加到面板中,代码如下:

pane.getChildren().addAll(lbName,tfName,lbPassword,tfPassword,okbtn);

程序运行后界面如下所示:

 

 

当改变窗口大小时,界面如下:

 

 

(二) GridPane面板

它采用的布局策略是:将整个面板划分为若干个格子,每个格子的大小是一样的,每个格子中可以放置一个控件,类似于表格的方式。

如下代码创建了一个GridPane对象:

GridPane pane = new GridPane();

    pane.setAlignment(Pos.CENTER);

    pane.setPadding(new Insets(11.5, 12.5, 13.5, 14.5));

    pane.setHgap(5.5);

    pane.setVgap(5.5);

向面板中添加六个按钮,代码如下:

pane.add(new Button("1"), 0, 0);

    pane.add(new Button("2"), 1, 0);

    pane.add(new Button("3"), 0, 1);

    pane.add(new Button("4"), 1, 1);

    pane.add(new Button("5"), 0, 2);

    pane.add(new Button("6"), 1, 2);

add方法的第二个和第三个参数是指定控件摆放的位置,分别表示所在的列和行,0是第一行和第一列。布局效果如下图所示:

 

 

 (三) BorderPane面板

它采用的布局策略是:将整个面板划分五个区域,分别是上、下、左、右、中,每个区域可以放置一个控件。

首先创建一个BorderPane对象,代码如下:

BorderPane pane = new BorderPane();

然后在BorderPane对象的五个区域分别放置五个CustomPane对象,CustomPane是自定义面板,是为了方便放置标签。代码如下:

pane.setTop(new CustomPane("Top")); //放置在上面

    pane.setRight(new CustomPane("Right"));//放置在右边

    pane.setBottom(new CustomPane("Bottom"));//放置在上面

    pane.setLeft(new CustomPane("Left"));//放置在左边

    pane.setCenter(new CustomPane("Center"));//放置在中间

效果如下图所示:

 

 

(四) HBox面板

HBox是将所有的控件放在同一行,无论有多少个控件都是放在同一行。

首先创建一个HBox对象,代码如下:

HBox hBox = new HBox(15);

    hBox.setPadding(new Insets(15, 15, 15, 15));

    hBox.setStyle("-fx-background-color: gold");

然后,在面板上添加六个按钮,代码如下:

hBox.getChildren().add(new Button("one"));

    hBox.getChildren().add(new Button("two"));

    hBox.getChildren().add(new Button("three"));

    hBox.getChildren().add(new Button("four"));

    hBox.getChildren().add(new Button("five"));

    hBox.getChildren().add(new Button("six"));

布局效果如下图所示:

 

 

当窗口的大小改变时,所有的控件总是放在同一行,如下图所示:

 

 

 

 

 (五) VBox面板

VBox的布局策略与HBox类似,不过VBox是将所有的控件放在同一列。

首先创建一个VBox对象,代码如下:

VBox vBox = new VBox(15);

    vBox.setPadding(new Insets(15, 5, 5, 5));

然后,在VBox对象中添加六个按钮,代码如下:

vBox.getChildren().add(new Button("one"));

    vBox.getChildren().add(new Button("two"));

    vBox.getChildren().add(new Button("three"));

    vBox.getChildren().add(new Button("four"));

    vBox.getChildren().add(new Button("five"));

    vBox.getChildren().add(new Button("six"));

布局效果如下图所示:

 

 

     以上五种面板的布局策略各有其特点,可以根据实际情况选取合适的面板进行布局。但很多时候如果只使用其中的一种面板,可能难以构造我们所需要的界面,这个时候可以将多种不同类型的面板结合起来使用,就可以达到我们所需要的效果。

    当然,JavaFX提供的面板不止上面介绍的五种,其它的面板这里就不介绍了,有兴趣的可以参考JDK文档中的详细介绍。

    此外,为了方便我们构造界面,专门有一个配套的用于构造界面的工具软件JavaFX Scene Builder,使用这个工具,我们就可以采用可视化的方式来构造界面,即所见即所得。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值