JavaFX 2.0布局窗格– HBox和VBox

如果要对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为根)并显示我们的应用程序。
您的应用程序现在应如下所示:

javafx1

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

javafx2

您可以看到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

资料来源:w3Schools.com

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

javafx4
注意HBox周围的10px填充。 如果现在调整窗口大小,则其外观应类似于以下内容: javafx5 如您所见,左侧的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机串行通信全解析

1.什么是串行通信&#xff1f; 串行通信&#xff08;英语&#xff1a;Serial communication&#xff09;是指在计算机总线或其他数据通道上&#xff0c;每次传输一个位元数据&#xff0c;并连续进行以上单次过程的通信方式。与之对应的是并行通信&#xff0c;它在串行端口上通过…

java type 类型,java中的泛型类型与Type接口

假设我们定义了一个Room的类&#xff0c;表示一个房间public classRoom(){}由于我们建造好房间是&#xff0c;不知道房间以后的用途&#xff0c;他可能用来住人&#xff0c;也有可能用来放货物&#xff0c;因此需要用到泛型。但是我们可能想获取Room这个房间里面进来的的东西的…

vray学习笔记(3)-多维子材质是个什么东西

多维子材质是个什么东西&#xff1f;为什么出现这个概念&#xff1f; 在3dsmax官方网站&#xff0c;我们可以看到它的定义&#xff1a; The Multi/Sub-Object material lets you assign different materials at the sub-object level of your geometry. 意思是多维子材质这个概…

Hello JavaFX 2.0:命令行介绍

我从博客文章Hello JavaFX 2.0&#xff1a;NetBeans 7.1 beta的介绍中&#xff0c;从NetBeans 7.1 beta的角度看了一个无处不在的Hello World示例的简单JavaFX版本。 在本文中&#xff0c;我将介绍仅使用命令行工具通过JavaFX实现的Hello World版本。 JavaFX 2.0 API文档包括ja…

oracle列分区,Oracle数据库分区--实例

分区表通过对分区列进行判断&#xff0c;把满足不同条件的分区列对应的记录保存在不同的分区中。一、何为分区表什么情况下会使用分区表&#xff1f;表中已有大量数据&#xff0c;或预计到表中将会保存大量的数据可以按照预期(月份、区域、dml)对表中的数据执行查询和更新什么是…

ZK实际应用:MVVM –与ZK客户端API一起使用

在之前的文章中&#xff0c;我们使用ZK的MVVM实现了以下功能&#xff1a; 将数据加载到表中 使用表单绑定保存数据 删除条目并以编程方式更新视图 ZK MVVM和ZK MVC实现方式之间的主要区别是&#xff0c;我们不直接在controller&#xff08;ViewModel&#xff09;类中访问和操…

终极JPA查询和技巧列表–第1部分

我们可以在Internet上找到一些JPA“如何做”&#xff0c;在本博客的此处&#xff0c;教您如何使用JPA执行多项任务。 通常&#xff0c;我看到有人问有关使用JPA进行查询的问题。 通常&#xff0c;为了回答此类问题&#xff0c;提供了几个链接&#xff0c;以尝试找到该问题的解决…

Spring集成–第2节–更多世界

这是Spring Integration Session 1的后续活动 第一部分是使用Spring Integration的简单Hello World应用程序。 我想通过考虑其他一些方案来进一步介绍它。 因此&#xff0c;对Hello World应用程序的第一个更改是添加网关组件。 要快速重新访问较早的测试程序&#xff0c;请执行…

oracle 会话实例,返璞归真:Oracle实例级别和会话级别的参数设置辨析

杨廷琨(yangtingkun)云和恩墨 CTO高级咨询顾问&#xff0c;Oracle ACE 总监&#xff0c;ITPUB Oracle 数据库管理版版主参数文件是Oracle数据库文件中级别最低&#xff0c;也是最基本的文件&#xff0c;但是也是数据库实例启动第一个涉及的文件。如果参数文件缺失或者某些参数设…

在多节点集群中运行Cassandra

这篇文章收集了我在多节点中设置Apache Cassandra集群的步骤。 在设置集群时&#xff0c;我已经参考了Cassandra Wiki和Datastax文档。 详细介绍了以下过程&#xff0c;分享了我建立群集的经验。 设置第一个节点 添加其他节点 监视集群– nodetool &#xff0c; jConsole &am…

Oracle 添加 scott 示例用户

学习SQL有一段时间了&#xff0c;但是也忘记的差不多了&#xff0c;今天有赶紧复习复习&#xff0c;然后发现一个问题&#xff0c;为啥之前看的视频教程&#xff0c;马士兵用的Oracle有scott用户和那些表格&#xff0c;而我的没有&#xff1f;难道是Oracle取消了&#xff1f;然…

win8oracle10g安装报错,Win8电脑安装Oracle 10g提示程序异常终止的解决方法

有win8系统用户反映说在安装Oracle 10g的时候&#xff0c;选择高级安装之后&#xff0c;就弹出一个窗口&#xff0c;提示程序异常终止&#xff0c;发生内部错误&#xff0c;导致Oracle 10g安装失败&#xff0c;该怎么解决这样的问题呢&#xff1f;下面随小编一起来看看Win8电脑…

<avatar: frontiers of pandora>技术overview

https://www.eurogamer.net/digitalfoundry-2023-avatar-frontiers-of-pandora-and-snowdrop-the-big-developer-tech-interview https://www.youtube.com/watch?vLRI_qgVSwMY&t394s 主要来自euro gamer上digital foundry对于avatar的开发团队Massive工作室的采访&#xf…

iOS 启动连续闪退保护方案

版权声明&#xff1a;本文由刘笑江原创文章&#xff0c;转载请注明出处: 文章原文链接&#xff1a;https://www.qcloud.com/community/article/79 来源&#xff1a;腾云阁 https://www.qcloud.com/community 一.引言 “如果某个实体表现出以下任何一种特性&#xff0c;它就具备…

实战Java内存泄漏问题分析 -- hazelcast2.0.3使用时内存泄漏 -- 2

hazelcast 提供了3中方法调用startCleanup:第一种是在ConcuurentMapManager的构造函数中&#xff0c;通过调用node的executorManager中的ScheduledExecutorService来创建每秒运行一次cleanup操作的线程&#xff08;代码例如以下&#xff09;。因为这是ConcuurentMapManager构造…

@SuppressLint(NewApi)和@TargetApi()的区别

转自&#xff1a;http://blog.csdn.NET/wbshuang09/article/details/44920549在Android代码中&#xff0c;我们有时会使用比我们在AndroidManifest中设置的android:minSdkVersion版本更高的方法&#xff0c;此时编译器会提示警告&#xff0c;解决方法是在方法上加上SuppressLin…

零基础自学编程前需要知道的知识

你是否适合编程?学习编程后能做什么?如何选择编程语言?有哪些免费的线上学习网站推荐?今天这篇好文将那些自学编程前需要了解和思考的问题都记录下来&#xff0c;希望能给那些刚刚开始或正准备自学编程的朋友们带去一些启发。 你是否适合自学编程 自学编程会是一个漫长而艰…

Eclipse设置黑色主题

1点击help--->install new software 2输入 http://eclipse-color-theme.github.com/update 3下载安装eclipse color theme插件如下图 4完成后点击windows--->preferences------>Appearance下多了一个Color Theme 5,点击选择喜欢的主题即可&#xff0c;也可以自己下载主…

wcf rest系列文章

http://www.cnblogs.com/artech/archive/2012/02/15/wcf-rest.html 需要注意的是&#xff0c;发布的服务&#xff0c;可以在web behavior中指定显示help页面。 http://localhost/ApplicationName/ServiceName.svc/help 需要注意的是&#xff0c;访问.svc的页面一定不要多加/;否…

登录:应用程序错误通知

几个月前&#xff0c;当我进行大型应用程序重构时&#xff0c;发现用于记录日志的基于log4j的代码确实令人讨厌&#xff0c;重复了数百次&#xff1a; if (LOG.isDebugEnabled()) {LOG.debug("Logging some stuff " stuff); }我想摆脱isXXXEnabled&#xff0c;这就…