JavaFX 2.0布局窗格– BorderPane

BorderPane非常适合开发更复杂的布局。 通常, BorderPane提供五个不同的区域:顶部,右侧,底部,左侧和中央。 您可以通过调用setTop/setBottom/set…方法将Node设置到每个区域。 这种方法使开发“类似于网站”的应用程序窗口变得非常容易,您可以在其中的菜单栏或工具栏在顶部,左侧导航,在底部有某种页脚,在中心区域显示您的主要内容右侧的其他信息。

重要的是要知道,每个区域的大小都不同:

  • 顶部和底部区域将调整为其子级的首选高度,并占用其宽度的所有可用空间。
  • 左侧和右侧区域将调整其子级的首选宽度,并占用其高度的所有可用空间。
  • 中心区域占用了其高度和宽度的所有可用空间。

下图演示了调整应用程序窗口大小时BorderPane的行为:

资料来源:自己的插图

BorderPane –示例

/*** Created on: 29.03.2012* @author Sebastian Damm*/
public class BorderPaneExample extends Application
{private BorderPane root;@Overridepublic void start(Stage primaryStage) throws Exception{root = new BorderPane();        root.setTop(getMenu());root.setRight(getRightHBox());root.setBottom(getFooter());root.setLeft(getLeftHBox());root.setCenter(getCenterPane());Scene scene = new Scene(root, 900, 500);        primaryStage.setTitle("BorderPane Example");primaryStage.setScene(scene);primaryStage.show();    }private MenuBar getMenu(){MenuBar menuBar = new MenuBar();Menu menuFile = new Menu("File");                Menu menuEdit = new Menu("Edit");Menu menuHelp = new Menu("Help");        menuBar.getMenus().addAll(menuFile, menuEdit, menuHelp);return menuBar;}private HBox getRightHBox(){HBox hbox = new HBox();VBox vbox = new VBox(50);vbox.setPadding(new Insets(0, 20, 0, 20));vbox.setAlignment(Pos.CENTER);vbox.getChildren().addAll(new Text("Additional Info 1"), new Text("Additional Info 2"), new Text("Additional Info 3"));    hbox.getChildren().addAll(new Separator(Orientation.VERTICAL), vbox);     return hbox;}private HBox getLeftHBox(){HBox hbox = new HBox();VBox vbox = new VBox(10);vbox.setPadding(new Insets(10));Text text = new Text("Navigation");text.setFont(Font.font("Helvetica", FontWeight.BOLD, 20));VBox vboxText = new VBox(10);for (int i = 1; i >= 10; i++){vboxText.getChildren().add(new Text("Category " + i));}        vboxText.setTranslateX(10);vbox.getChildren().addAll(text, vboxText);        hbox.getChildren().addAll(vbox, new Separator(Orientation.VERTICAL));return hbox;}private VBox getFooter(){VBox vbox = new VBox();HBox hbox = new HBox(20);hbox.setPadding(new Insets(5));hbox.setAlignment(Pos.CENTER);hbox.getChildren().addAll(new Text("Footer Item 1"), new Text("Footer Item 2"), new Text("Footer Item 3"));        vbox.getChildren().addAll(new Separator(), hbox);return vbox;}private StackPane getCenterPane(){StackPane stackPane = new StackPane();stackPane.setAlignment(Pos.CENTER);Rectangle rec = new Rectangle(200, 200);rec.setFill(Color.DODGERBLUE);rec.widthProperty().bind(stackPane.widthProperty().subtract(50));rec.heightProperty().bind(stackPane.heightProperty().subtract(50));stackPane.getChildren().addAll(rec);return stackPane;}public static void main(String[] args){Application.launch(args);}
}

这个小应用程序展示了如何使用BorderPane 。 在start方法中,我们仅使用BorderPane类的各种set…方法,以便使用Node填充每个区域。

顶部区域充满了MenuBar 。 在这里,我简单地创建一个带有三个不同MenusMenuBar 。 在我的下一篇文章中,我将深入介绍JavaFX中菜单的创建。

除了菜单外,代码的一个方面可能对您来说是新的。 请看一下第100行:

BorderPane的中心区域填充了一个拥有RectangleStackPane 。 由于Rectangle不会直接使用其父对象(如所有Shape对象)直接调整大小,因此,当我们想调整Rectangle大小时,我们必须采用其他方法。 这就是为什么我将Rectangle的宽度和高度绑定StackPane的宽度和高度(减去50个像素)的原因。 更改StackPanes的大小时, Rectangle将相应地自动调整大小。

这是有关应用程序外观和大小调整的三张图片:

如您所见, BorderPane的不同区域BorderPane根据我在本文顶部说明的规则进行相应调整。

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


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

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

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

相关文章

页面排版简单样式

页面排版简单样式demo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml" xml:lang"zh-cn"> &l…

JavaWeb基础(jsp初识)

jsp, java server page jsp页面是在服务器上运行的一个页面 动态网页 与后台有数据交互的页面 与其他语言的区别: jsp 使用java语言进行开发, 安全性高, 适合大型项目, 企业级的文本应用分布式项目, 服务器集群, hadoop asp.net 使用c#, .Net平台, 简单易用, 因为不开源, 所以安…

nao机器人拆解_一些机器人硬件网站

以前收集过一些网站&#xff0c;偏机器人机械结构、硬件、参数(也有模拟或算法)。在 https://www.zhihu.com/question/19826366 也夹杂着一些网址&#xff0c;但是有些网址没有深入的内容&#xff0c;排版也不好&#xff0c;所以 在这里编辑成一个列表&#xff0c;方便归档。欢…

心电图是模拟计算机吗,心电图仪

心电图仪是由威廉爱因托芬(W. Einthoven,1860-1927)发明的。 什么是心电图仪(机)M311986 心电图仪能将心脏活动时心肌激动产生的生物电信号(心电信号)自动记录下来&#xff0c;为临床诊断和科研常用的医疗电子仪器。国内一般按照记录器输出道数划分为&#xff1a;单道、三道、六…

从Java 8启动项目拼图?

在马克雷因霍尔德 &#xff08; Mark Reinhold &#xff09;在他的《 项目拼图&#xff1a;火车晚点 》一文中提出“将项目拼图推迟到Java 9的下一个发行版中”。 他解释了这样做的原因&#xff1a;“仍然存在一些重大的技术挑战”&#xff0c;并且“没有足够的时间来进行广泛的…

ChannelOption用到的socket的标准参数

ChannelOption.SO_BACKLOG, 1024 BACKLOG用于构造服务端套接字ServerSocket对象&#xff0c;标识当服务器请求处理线程全满时&#xff0c;用于临时存放已完成三次握手的请求的队列的最大长度。如果未设置或所设置的值小于1&#xff0c;Java将使用默认值50。 ChannelOption.SO_K…

cbrt c语音_isgraph - [ C语言中文开发手册 ] - 在线原生手册 - php中文网

在头文件中定义int isgraph(int ch);检查给定字符是否具有图形表示形式&#xff0c;即它是数字(0123456789)&#xff0c;大写字母(ABCDEFGHIJKLMNOPQRSTUVWXYZ)&#xff0c;小写字母(abcdefghijklmnopqrstuvwxyz)或标点符号(!"#$%&()*,-./:;<>?[\]^_{|}~)或特定…

计算机的内存和cpu,内存与CPU二者之间的关系_Intel服务器CPU_服务器产业-中关村在线...

“在一起&#xff0c;在一起”&#xff0c;相信这也是很多人希望的结果&#xff0c;无论是从技术角度&#xff0c;还是从空间角度&#xff0c;似乎二者都有着很多理由被放在一起完成任务。但是&#xff0c;二者为何一直没有“在一起”呢&#xff1f;也许这句歌词可以回答原因&a…

JUnit,Logback,带有Maven 3的Maven

在本系列中&#xff0c;我们已经学习了建立基本的Spring MVC应用程序并学习了如何在Spring MVC中处理表单 。 现在该讨论更多涉及的主题了。 但是&#xff0c;在我们涉足更深的领域之前&#xff0c;让我们先进行一些基础设置。 单元测试 我不是TDD传播者。 我在那里说了。 我从…

Gradle中的buildScript,gradle wrapper,dependencies等一些基础知识

就想收藏一篇好文&#xff0c;哈哈&#xff0c;无他 Gradle中的buildScript代码块 - 黄博文 然后记录一些gradle的基础知识&#xff1a; 1.gradle wrapper就是对gradle的封装&#xff0c;可以理解为项目内部内置了gradle 2.dependencies的参数 上官方参数表https://docs.gradle…

phonegap工程中修改app的名字

针对phonegap比较高的版本&#xff0c;我的是6.4.0。 在phonegap工程中&#xff0c;当添加了iOS和android平台或多个平台后&#xff0c;工程进行了开发&#xff0c;然后觉得app的名字想修改一下&#xff08;比如在手机上显示的app名字&#xff0c;或者通过ipa导入安装或者apk包…

ac ap方案 华为_华为无线_AC+AP小型无线网络配置实验_v1

【如果在实验中有什么疑问&#xff0c;欢迎关注微信公众号“IT后院”给我留言&#xff0c;我会抽空回答你的问题】华为无线-ACAP小型无线网络配置实验_v1网络结构图&#xff1a;步骤一&#xff1a;配置网络连通性SW:interface Vlanif100ip address 192.168.0.1 255.255.255.0in…

css类选择器或逻辑,深入理解CSS中选择器的逻辑处理

在过去的很长一段时间中&#xff0c;我们都说 CSS 是不带有任何逻辑的&#xff0c;意思是在 CSS 中没有控制流&#xff0c;也没有某种类似于其他编程语言的方式来组织 CSS。CSS 天生缺乏逻辑性的问题导致了预处理器的出现。然而业界却对 CSS 预处理器褒贬不一&#xff0c;支持预…

JSF基于事件的交流:新派方法

在上一篇文章中 &#xff0c;我们学习了基于Observer / Event Listener和Mediator模式的基于事件的通信。 由于它们的缺点&#xff0c;我想展示基于事件的通信的更有效方法。 我们将从Google Guava EventBus开始&#xff0c;以CDI &#xff08;Java EE平台的上下文和依赖注入&a…

菜鸟之路-浅谈设计模式之单例设计模式

单例设计模式 定义&#xff1a;确保一个类仅仅有一个实例&#xff0c;并且自行实例化并向整个系统提供这个实例。单例模式是一种经常使用的软件设计模式。在它的核心结构中仅仅包括一个被称为单例的特殊类。通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪…

python 32bit数据结构_python实现bitmap数据结构详解

bitmap是很常见的算法设计&#xff0c;例如用以Bloom Filter中&#xff1b;用以无反复整数金额的排列这些。bitmap一般根据数组来完成&#xff0c;数组中每一个原素能够当做是一系列二进制数&#xff0c;全部元素组成更高的二进制结合。针对Python而言&#xff0c;整数金额种类…

MVC如何使用开源分页插件shenniu.pager.js

最近比较忙&#xff0c;前期忙公司手机端接口项目&#xff0c;各种开发调试发布现在几乎上线无问题了&#xff1b;虽然公司项目忙不过在期间抽空做了两件个人觉得有意义的事情&#xff0c;一者使用aspnetcore开发了个人线上项目&#xff08;要说线上其实只能ip访问&#xff0c;…

四. 基于环视Camera的BEV感知算法-PETR

目录 前言0. 简述1. 算法动机&开创性思路2. 主体结构3. 损失函数4. 性能对比5. PETRv2总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第四章——基…

Java EE 6 VS Spring 3:Java EE已经杀死了Spring? 没门!

介绍 几天前&#xff0c;我在听Java Spotlight Podcast的插曲85 。 在这次演讲中&#xff0c; Bert Ertman和Paul Bakker讨论了从Spring迁移到Java EE。 基本上&#xff0c;在他们的介绍中&#xff0c;他们说&#xff0c;如今&#xff0c;选择Spring而不是Java EE是没有意义的。…

usb检测串口是哪个角_怎样测试串口和串口线是否正常

一步&#xff1a;把串口线或者USB转串口线插到计算机上。二步&#xff1a;打开串口调试助手接着选择串口&#xff0c;串口线和 USB 转串口的端口号查看路径&#xff1a;电脑上--右键--属性--硬件--设备管理器-端口(COM 和LPT),点开端口前面的号查看即可。注释&#xff1a;1、US…