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

JavaFX 2.0布局窗格– BorderPane相关推荐

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

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

  2. JavaFX 2.0布局窗格– HBox和VBox

    如果要对JavaFX 2.0中所有不同的布局窗格进行概述,或者想了解有关它们的一些基本知识,请参阅我以前的文章< JavaFX 2.0中的布局窗格> . 布局窗格HBox和VBox绝对是J ...

  3. JavaFX 2.0布局窗格– GridPane

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

  4. JavaFX 2.0 Hello World

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

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

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

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

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

  7. javafx sdk html 布局,JavaFX2开发教程

    JavaFX2开发教程 更新时间:2017/1/24 18:04:00  浏览量:851  手机版 第一回 JavaFX2.0简介 javaFX2.0是JavaFX最新的主要升级发布版.它的很多新特性 ...

  8. JavaFX 2.0示例介绍书

    我最近完成了有关JavaFX 2.0 SDK新版本的书的编写,并且已经将它放在您附近的书店( Amazon )的书架上. 该书将逐步指导您完成JavaFX 2.0的来龙去脉. 当您遇到一章时,将看到一 ...

  9. 从JavaFX 1.3迁移到JavaFX 2.0

    几天前,我完成了将Modellus的源代码从JavaFX 1.3脚本迁移到JavaFX 2.0 Java语言的过程. 因此,我认为写关于我在此过程中学到的知识会很好. 我想指出,如果您想继续在Java ...

最新文章

  1. 【组队学习】【24期】集成学习(中)
  2. 测试优惠券要怎么写测试用例?
  3. Loadrunner压测时,出现的问题汇总
  4. Distributed Systems-leader based分布式一致性协议
  5. CTF-杂项与密码学之工具使用汇总(三)
  6. vaniglia 源码学习 (六)
  7. 13个Pandas实用技巧,有点香 !
  8. C语言CRC32 逆向算法源码
  9. 从页面底部向上弹出dialog,消失时逐渐向下(转)
  10. 深圳增强互动科技_增强女性在科技领域的十项原则
  11. Postgresql 插入json数据
  12. linux内核 can总线,基于Linux的PC104总线与CAN总线通信设计
  13. iOS定位-核心定位框架CLLocation
  14. Spss-kmeans聚类分析操作
  15. chronodex怎么用_滴答清单使用全攻略:如何把手帐搬到滴答清单上,提升效率?...
  16. Netty + JavaFx 实战:仿桌面版微信聊天
  17. 论文复现——CE-FPN: Enhancing Channel Information for Object Detection
  18. android安装到内存卡,android手机怎么把软件安装到内存卡里
  19. [agc012e]Camel and Oases
  20. JAVA探针机制—Agent(一)

热门文章

  1. nginx负载均衡与反向代理
  2. java isempty_Optional.isEmpty()即将加入Java吗?
  3. cloudwatch_将CloudWatch Logs与Cloudhub Mule集成
  4. 子模板继承父模板示例_模板设计模式示例
  5. 什么是通用字符名称?_通用名称
  6. spring batch_Spring Batch作为Wildfly模块
  7. Java代理初学者指南
  8. Java 12新功能完整指南
  9. 在Spring Boot启动时运行代码
  10. cargo maven_与Maven 3,Failsafe和Cargo插件的集成测试