如果要对JavaFX 2.0中所有不同的布局窗格进行概述,或者想了解有关它们的一些基本知识,请参阅我以前的文章《 JavaFX 2.0中的布局窗格》 。
布局窗格HBoxVBox绝对是JavaFX 2.0中最基本的布局容器。 如您所知,它们的用途是将所有子级布置在一个水平行( HBox )或一个垂直列( VBox )中。 因为它们非常容易使用,并且对于较小的布局问题非常有用,所以您可能会经常使用它们。 我将给出两个有关如何使用它们的示例。 与其他示例一样,首先是代码,然后是解释。

HBox和VBox –示例1
 

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;/**** Created on: 20.03.2012* @author Sebastian Damm*/
public class HBoxandVBoxExample extends Application
{@Overridepublic void start(Stage primaryStage) throws Exception{                HBox hbox = new HBox(50);hbox.setAlignment(Pos.CENTER); // default TOP_LEFTVBox vbox1 = new VBox();vbox1.setAlignment(Pos.BOTTOM_CENTER);vbox1.setStyle("-fx-border-style: solid;"+ "-fx-border-width: 1;"+ "-fx-border-color: black");VBox vbox2 = new VBox(10);vbox2.setAlignment(Pos.CENTER);vbox2.setStyle("-fx-border-style: solid;"+ "-fx-border-width: 1;"+ "-fx-border-color: black");VBox vbox3 = new VBox(20);vbox3.setAlignment(Pos.TOP_CENTER);vbox3.setStyle("-fx-border-style: solid;"+ "-fx-border-width: 1;"+ "-fx-border-color: black");for (int i = 0; i < 5; i++){Button bt = new Button("Button " + (i+1));Button bt2 = new Button("Button " + (i+1)); // unfortunately there´s no "clone" or "copy" methodButton bt3 = new Button("Button " + (i+1));vbox1.getChildren().add(bt);vbox2.getChildren().add(bt2);vbox3.getChildren().add(bt3);}hbox.getChildren().addAll(vbox1, vbox2, vbox3);Scene scene = new Scene(hbox, 350, 250); // the hbox is the root nodeprimaryStage.setTitle("HBox and VBox Example");primaryStage.setScene(scene);primaryStage.show();}public static void main(String[] args){Application.launch(args);}
}
基本上,我们创建三个不同的VBox,并将它们放入一个HBox中。 在这两个类中,您都可以直接在构造函数中或通过setSpacing方法定义间距值。 此值将用作窗格中各个子项之间的间隙。 行HBox hbox = new HBox(50); 因此创建一个HBox来容纳三个VBox,每个VBox之间的间隔为50像素。
我们使用setAlignment方法来指定各个VBox如何安排和布局所有子级。
使用setStyle可以将自定义CSS样式应用于任何Node 。 我不想进一步详细介绍,因为我将在下一篇文章中介绍JavaFX 2.0中CSS样式,但是如果您已经熟悉CSS,那么您可能已经注意到JavaFX 2.0团队幸运的是,我决定非常严格地遵循W3C( http://www.w3.org )定义CSS标准。 如果您不熟悉CSS,则只需要知道CSS的这些行会在组件周围创建1px宽的黑色边框。 我在这里使用它们来显示各个VBox的大小。
现在,接下来的几行对于您来说应该已经很普通了:我们为每个VBox创建五个按钮,将不同的VBox放入我们的HBox中,声明一个Scene对象(以HBox为根)并显示我们的应用程序。
您的应用程序现在应如下所示:

您可以看到每个VBox以定义的间距值布置其子按钮, HBox布置三个VBox且间距为50像素。 因为我们为每个VBox设置了不同的对齐方式,所以您可以看到它们以特定方式将按钮排列在其边界内。
注意:我们还为HBox指定了路线,否则三个VBox不会布置在中间!
如果您调整应用程序窗口的大小,则应如下所示:

您可以看到VBoxes不断增长并填充了其父级提供的空间,并且它们仍根据其设置的对齐方式排列其子级。
HBox和VBox –示例2
下一个示例将显示如何使用静态setMarginsetHgrow (分别为setVgrow )方法:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;/**** Created on: 20.03.2012* @author Sebastian Damm*/
public class HBoxandVBoxExample2 extends Application
{@Overridepublic void start(Stage primaryStage) throws Exception{                StackPane root = new StackPane();HBox hbox = new HBox(30); // create a HBox to hold 2 vboxes        // create a vbox with a textarea that grows verticallyVBox vbox = new VBox(10);        Label lbName = new Label("I´m a label!");TextField textField = new TextField();TextArea textArea = new TextArea();textArea.setPrefWidth(100);VBox.setVgrow(textArea, Priority.ALWAYS);        vbox.getChildren().addAll(lbName, textField, textArea);// create a vbox that grows horizontally inside the hboxVBox vbox2 = new VBox(10);        Label lbName2 = new Label("I´m also a label!");TextField tf2 = new TextField();tf2.setPromptText("type here");TextArea textArea2 = new TextArea();textArea2.setPrefWidth(100);vbox2.getChildren().addAll(lbName2, tf2, textArea2);HBox.setHgrow(vbox2, Priority.ALWAYS);// the next two lines behave equally - try to comment the first line out and use the 2nd linehbox.setPadding(new Insets(20));
//        StackPane.setMargin(hbox, new Insets(20));hbox.getChildren().addAll(vbox, vbox2);root.getChildren().add(hbox);Scene scene = new Scene(root, 500, 300); // the stack pane is the root nodeprimaryStage.setTitle("HBox and VBox Example 2");primaryStage.setScene(scene);primaryStage.show();        }public static void main(String[] args){Application.launch(args);}
}
在此示例中,我们创建了两个VBox,它们是HBox的子级。 VBox内有一个标签,一个文本字段和一个文本区域。
第一行是VBox.setVgrow(textArea, Priority.ALWAYS) 。 我们定义的这行代码是,如果TextArea对象包含在VBox则它应始终垂直增长(否则,将不会有任何效果)。 接下来,将重点放在HBox.setHgrow(vbox2, Priority.ALWAYS) 。 在这里,我们告诉第二个VBoxHBox内水平生长。
最后使用hbox.setPadding(new Insets(20));StackPane.setMargin(hbox, new Insets(20))我们给整个HBox填充一些内容。 这两行在这里表现相同,因为一方面我们为窗格本身指定了一个填充,窗格应该在其边界内使用填充来布置其子级,而另一方面,我们告诉父级使用给定的布局对窗格进行布局它周围的边缘。
注意:边距是外部距离/间隙,填充内部距离/间隙。

这是一张为您展示“ CSS Box Model”的图片,它演示了内容,填充,边框和元素边距之间的关系。

资料来源:w3Schools.com

因为setPadding方法是在Region类中定义的,所以每个布局窗格都可以使用此方法。 Insets类通常用于这些目的,并提供了两种不同的构造函数:一种采用一个double值并为每侧定义相同的填充,而一个构造函数采用4个double值并从上至左顺时针定义填充。
提示:如果将边框应用于HBox并在两行之间切换以设置填充/边距,您会更清楚地看到差异。
您的应用程序应如下所示:


注意HBox周围的10px填充。 如果现在调整窗口大小,则其外观应类似于以下内容: 如您所见,左侧的VBoxTextArea垂直增长,而整个右侧的VBoxHBox水平增长。

参考: JavaFX 2.0布局窗格–来自我们JCG合作伙伴 Sebastian Damm的HBox和VBox在Java博客上的Just my 2 cents 。

翻译自: https://www.javacodegeeks.com/2012/07/javafx-20-layout-panes-hbox-and-vbox.html

JavaFX 2.0布局窗格– HBox和VBox相关推荐

  1. JavaFX 2.0布局窗格– BorderPane

    BorderPane非常适合开发更复杂的布局. 通常, BorderPane提供五个不同的区域:顶部,右侧,底部,左侧和中央. 您可以通过调用setTop/setBottom/set-方法将Node设 ...

  2. JavaFX 2.0布局窗格– FlowPane和TilePane

    FlowPanes和TilePanes是不错的布局窗格,如果您想一个接一个地连续地水平或垂直地布局子级,则可以. 它们彼此非常相似,因为它们都将子级布置成列(在水平Flow / TilePane的情况 ...

  3. JavaFX 2.0布局窗格– GridPane

    毫无疑问, GridPane是JavaFX 2.0中功能最强大,最灵活的布局窗格. 它在由行和列组成的灵活网格中布置其子项,与Swing的GridBagLayout或HTML的表格模型非常相似. 这种 ...

  4. javafx布局类HBox和VBox

    HBox HBox中的H是Horizontal的首字母,意为水平的.HBox即水平的布局,将组件按水平方向依次排列. 代码 import javafx.application.Application; ...

  5. JavaFX 2.0 Hello World

    在讨论示例本身之前,我想向您展示如何在NetBeans中创建JavaFX应用程序. (如果尚未安装JavaFX和NetBeans,请参阅我以前的文章< 安装JavaFX 2.0和NetBeans ...

  6. JavaFX七巧板游戏:布局窗格Panes

    JavaFX布局之各种Panes 上次写博客还是上次. 自开始把这两东西一起学Kotlin+JavaFX的顺滑已经过去差不多5个月,联盟--都是废物.我已经编了大概3个小的应用软件,申请了两个软件著作 ...

  7. 【.NET Core 跨平台 GUI 开发】第二篇:Gtk# 布局入门,初识HBox 和 VBox

    这是 Gtk# 系列博文的第二篇.在上一篇博文<编写你的第一个 Gtk# 应用>中,我们提到"一个 Gtk.Window 只能直接包含一个部件".这意味着,在不做其他额 ...

  8. JavaFx之横向布局左右两侧对齐(十九)

    JavaFx之横向布局左右两侧对齐(十九) 横向布局HBox在子节点A.B中添加<HBox HBox.hgrow="ALWAYS"></HBox> 即可做到 ...

  9. java fx fxml界面_使用 JavaFX 2.0 FXML 呈现企业应用程序的 UI

    使用 JavaFX 2.0 FXML 呈现企业级应用程序 UI 作者:James L. Weaver 使用 FX 标记语言的强大功能定义企业级应用程序的 UI. 2012 年 6 月发布 下载: :示 ...

最新文章

  1. matlab批量储存变量_[转载]整理:matlab批量读入数据文件的方法
  2. 05 MapReduce应用案例02
  3. python采用面向对象编程模式吗_如何理解 Python 中的面向对象编程?
  4. 「源码分析」CopyOnWriteArrayList 中的隐藏知识,你Get了吗?
  5. BZOJ2176Strange string——最小表示法
  6. opencv-api getPerspectiveTransform
  7. Linux磁盘下面有个mpatha,Linux中如何使用vmstat命令
  8. 生产过程代码分析(二)--估计
  9. 如何使用 AirDrop 将 MAC 中的照片整理好,并上传到 iPhone 的相册中?
  10. c语言 word转pdf,批量Word转PDF之捷径
  11. (附源码)Springboot小型仪器公司生产管理系统 毕业设计 031853
  12. avr单片机流水灯程序c语言,AVR单片机综合流水灯C程序
  13. python--Venn图及upsetplot进阶
  14. Monitor模式和AP模式下获取WiFi的CSI信号
  15. android 日志打印内容完全相同,Log的chatty机制,identical 391 lines
  16. 毕业设计 基于单片机的智能音响设计与实现 -物联网 嵌入式 stm32
  17. 就是用计算机判断一个句子的语义,英语汉语词汇语义及句子结构对比
  18. JVM内存模型-回忆学习总结
  19. c++栈的基础应用,括号匹配、逆波兰表达式求值
  20. 使用Excel宏功能将考勤记录生成上班工时表

热门文章

  1. ssh无密码登陆权威指南
  2. zip unzip_zip和unzip上的Java要点
  3. pcf8523_PCF上的Spring Cloud合同和Spring Cloud Services
  4. java 编写代码_如果您在2016年编写过Java代码-这是您不容错过的趋势
  5. junit数据驱动测试_使用Junit和Easytest进行数据驱动的测试
  6. 使用Apache Cassandra设置SpringData项目
  7. java转换为c#_C#vs Java哪一个更快? 将25k C#转换为Java(2)
  8. 使用ArchUnit验证代码和体系结构约束
  9. spring和spring_Spring WebApplicationInitializer和ApplicationContextInitializer的混淆
  10. 如何在AWS EC2实例上部署Spring Boot应用程序