JavaFx---小结(1):谋篇布局

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Miha_Singh/article/details/83241196

最近用javafx写了几个小的图形界面程序,一路磕磕撞撞,写的时候遇到了不少问题,出去对javafx的不熟悉,一些小问题也让我通宵达旦地在网上找资料,甚是伤神,所以将这段时间的经验记录下来,以便以后查阅,也给大家做一个参考!
现在先来讲讲布局中的坑!!!
在做图形界面的时候,如果一开始就想法儿把各种各样的控件堆在scene(场景)里,那么你的界面将会变得一团糟,那为什么别人做出的界面就这么整洁,结构清晰呢?这里面就是布局的功劳!
那布局到底是什么呢?
以前我认为布局就想一个有容纳功能的容器一样(当然好像也差不多),但是这样的理解不便于灵活的理解和应用布局。其实,布局更像是一种约束方式,是一种结构,它控制在布局上的控件的摆放方式,各个控件之间的距离,还有将这些控件放在一个什么样的背景之上!说白了,布局就想一只无形的大手,将各个控件安排的明明白白!!!
在javafx中主要有以下几种布局方式:

  • VBox
  • HBox
  • GridPane
  • FlowPane
  • BorderPane
  • StackPane

1.VBox

VBox也就是垂直方向的布局,这样的布局就是说加入到这个布局的控件都会一溜儿的垂直排列。就像这样:
在这里插入图片描述
大家别小瞧了这个界面,这个界面看似简单,确实复杂布局的基础。大家在做界面的时候最好先设计一下界面的布局,对于一个复杂的布局,我们很难只通过一个布局就解决问题,而是在布局里嵌套布局,通过这样的组合和嵌套布局的方式实现复杂的界面。而相对于整个界面来说,可能是一个VBox布局里放了HBox,放了GridPane等布局,这样能够比较方便的实现复杂的布局。如果你在向界面中添加控件时总不能按照你想要的方式进行排列,你可以试试将界面的布局进行层次分析、设计,将整个布局划分为多个布局,也许就能就觉你的问题了。

2.HBox

其实HBox和VBox差不多,只不过是控件排列方式上的差别,就像在wxpython里,只有一个BoxSizer。HBox的作用和VBox差不多,可以用来作为整个界面的整体布局,而将其他布局添加进整体布局。such as:

整体布局
如图所示,在相应的布局里加入你的控件,一个复杂的界面就出来啦!

3.GridPane

在我刚开始接触布局时觉得最有用的应该就是网格布局了吧,可是在使用之后才发现网格布局存在着太多的限制,用在一些简单的布局上倒是不错。
网格布局中对每一行每一列都要求有相同的高度和宽度,也就是说你添加进网格布局的控件是真的会像网格一样整整齐齐地排列在布局上,就算某个控件很小,由于存在较大的控件,它所占的网格也会很大,这样的布局实在是太ugly了。就像这样:

在这里插入图片描述
btn4小小的,但是由于btn1大大的,导致它也必须在一个大大大的网格里。
注意:在向网格布中添加控件时制定了行列位置,则应该先指定列,再指定行!

4.FlowPane

FlowPane也叫流布局,其实它有点像HBox(VBox),但是又有点不同,流布局将控件按照加入的次序,根据你指定的方向进行组织,当这个方向上排不下了(由于界面大小的原因等),则会开始新的一个一列或一行。这个我用的比较少,就不往下结论了哈!

5.BorderPane

边界布局就是将整个布局分成了五个部分:上下左右中。
在这里插入图片描述

这个布局我也用的比较少,但是可以发现,这个布局其实也比较适合于整体布局,用于控制整个界面的布局,用于作为布局的布局。

5.StackPane

栈布局,听名字就知道这个布局应该是由栈的特性的,也就是只有放置在顶上的控件才会展示出来。

6.布局中的一些小问题

1.直接将布局放在场景中时,有时候布局会紧挨着窗口,这样可能不太美观,可以给布局加上(当然也可以给控件加上)Padding 属性,用来控制布局与窗口的上下左右的距离。
2.实现透明窗口的方法:

		//依次设置:pane->scene->stage
		//需要的设置如示:
		//该窗口的透明度是0.85
		pane.setStyle("-fx-background:transparent;-fx-background-color: rgba(255,255,255,0.85);" );
		scene.setFill(null);
		stage.initStyle(StageStyle.TRANSPARENT);

猜你喜欢

转载自blog.csdn.net/Miha_Singh/article/details/83241196