前面介绍了JavaFX标签控件的用法,其中提到Label文本支持中文字体,那么它到底支持哪些中文字体呢?自然要看当前的操作系统都安装了哪些字体才行,对于中文的Windows系统,默认安装了黑体“SimHei”、宋体“NSimSun”、仿宋“FangSong”与楷体“KaiTi”。在AWT与Swing的体系中,Font工具支持填入中文字体的名称;但在JavaFX编程之中,Font工具则要填写中文字体的拼音。除了这四种基础字体以外,只要系统安装了中文Office,则还会增加下述的中文字体,这些字体也可用于JavaFX代码:
隶书:LiSu
幼圆:YouYuan
方正舒体:FZShuTi
方正姚体:FZYaoti
华文细黑:STXihei
华文楷体:STKaiti
华文宋体:STSong
华文中宋:STZhongsong
华文仿宋:STFangsong
华文彩云:STCaiyun
华文琥珀:STHupo
华文隶书:STLiti
华文行楷:STXingkai
华文新魏:STXinwei

在界面布局方面,JavaFX也做了补充增强。原来AWT/Swing框架拥有三种布局:流式布局、网格布局、边界布局,然而缺少了两种常见布局:左右排列的水平布局和上下排列的垂直布局。尽管流式布局也是从左到右排列,但一行塞不下了会自动换行,无法实现固定展示一行的效果。单列多行的网格布局固然貌似垂直布局,但每个网格的高度是固定的,难以满足每行高度灵活变化的要求。AWT与Swing身为上个世纪的老古董,早已停止了功能扩充,所幸JavaFX适时推出了水平布局和垂直布局的参照控件。其中对照水平布局的控件名叫水平箱子HBox,对照垂直布局的控件名叫垂直箱子VBox,它俩名义上是箱子,其实跟流式窗格、网格窗格、边界窗格同样属于窗格大家族。在编码的时候,HBox和VBox的用法接近于流式窗格FlowPane,可以将它们看作是一种特殊的流式窗格。
接下来通过具体的代码来演示水平箱子和垂直箱子的作用,为了更好地观察箱子内部的标签文本,首先定义一个获取标签对象的公共方法getLabel,该方法的实现代码如下所示:

    // 获得指定文本及字体的标签private Label getLabel(String text, Font font) {Label label = new Label(text); // 创建一个标签label.setFont(font); // 设置标签的字体label.setAlignment(Pos.CENTER); // 设置标签的对齐方式label.setWrapText(true); // 设置标签文本是否支持自动换行return label;}

然后创建一个水平箱子,并往该箱子里依次添加四个文本标签,相关的操作代码片段示例如下:

      Button btn1 = new Button("水平排列"); // 创建一个按钮btn1.setOnAction(new EventHandler<ActionEvent>() { // 设置按钮的单击事件@Overridepublic void handle(ActionEvent arg0) { // 处理单击事件HBox hbox = new HBox(); // 创建一个水平箱子hbox.setAlignment(Pos.CENTER); // 设置水平箱子的对齐方式hbox.getChildren().add(getLabel("离离原上草", Font.font("SimHei", 25))); // 给水平箱子添加一个标签hbox.getChildren().add(getLabel("一岁一枯荣", Font.font("KaiTi", 25))); // 给水平箱子添加一个标签hbox.getChildren().add(getLabel("野火烧不尽", Font.font("NSimSun", 25))); // 给水平箱子添加一个标签hbox.getChildren().add(getLabel("春风吹又生", Font.font("FangSong", 25))); // 给水平箱子添加一个标签borderPane.setCenter(hbox); // 把水平箱子放到边界窗格的中央}});flowPane.getChildren().add(btn1); // 往流式窗格上添加按钮

运行包括上述测试代码的程序,单击按钮后的窗口界面如下图所示,可见此时四个文本标签从左到右挤在了同一水平方向。


接着创建一个垂直箱子,也往该箱子依次添加四个文本标签,相关的操作代码片段示例如下:

       Button btn2 = new Button("垂直排列"); // 创建一个按钮btn2.setOnAction(new EventHandler<ActionEvent>() { // 设置按钮的单击事件@Overridepublic void handle(ActionEvent arg0) { // 处理单击事件VBox vbox = new VBox(); // 创建一个垂直箱子vbox.setAlignment(Pos.CENTER); // 设置垂直箱子的对齐方式vbox.getChildren().add(getLabel("离离原上草", Font.font("LiSu", 30))); // 给垂直箱子添加一个标签vbox.getChildren().add(getLabel("一岁一枯荣", Font.font("YouYuan", 30))); // 给垂直箱子添加一个标签vbox.getChildren().add(getLabel("野火烧不尽", Font.font("STXingkai", 30))); // 给垂直箱子添加一个标签vbox.getChildren().add(getLabel("春风吹又生", Font.font("STXinwei", 30))); // 给垂直箱子添加一个标签borderPane.setCenter(vbox); // 把垂直箱子放到边界窗格的中央}});flowPane.getChildren().add(btn2); // 往流式窗格上添加按钮

再次运行包括上述测试代码的程序,单击按钮后的窗口界面如下图所示,可见此时四个文本标签改成从上到下的垂直排列了。


更多Java技术文章参见《Java开发笔记(序)章节目录》

转载于:https://www.cnblogs.com/pinlantu/p/11368463.html

Java开发笔记(一百三十八)JavaFX的箱子相关推荐

  1. Android开发笔记(三十八)列表类视图

    AdapterView AdapterView顾名思义是适配器视图,Spinner.ListView和GridView都间接继承自AdapterView,这三个视图都存在多个元素并排展示的情况,所以需 ...

  2. OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC

    OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...

  3. 计算机网络 - 练习(一百三十八)

    计算机网络 练习(一百三十八) 关于网络安全,以下说法中正确的是(). A. 使用无线传输可以防御网络监听 B. 木马是一种蠕虫病毒 C. 使用防火墙可以有效地防御病毒 D. 冲击波病毒利用 Wind ...

  4. getvalue参数计数不匹配_OpenCV开发笔记(六十八):红胖子8分钟带你使用特征点Flann最邻近差值匹配识别...

    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...

  5. Android开发笔记(六十八)工程库打包

    写好一个Android模块,比如说一个自定义控件或某个功能的sdk,然后开放出来给别人使用,就得通过某种方式把源码提供给对方.常见的打包方式有: 一.直接给源码,由开发者把代码加入到自己的工程中 该方 ...

  6. node JS獲取GPS_node学习笔记(三十八)

    一.什么是NodeJS? 1.Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. 2.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效 ...

  7. Android开发笔记(五十八)铃声与震动

    拖动条SeekBar SeekBar继承自进度条ProcessBar,有关ProcessBar的介绍见<Android开发笔记(四十九)异步任务处理AsyncTask>.SeekBar与P ...

  8. Java开发笔记(五十)几种开放性修饰符

    前面介绍子类继承父类的时候,提到了public(公共)和private(私有)两个修饰符,其中public表示它所修饰的实体是允许外部访问的:而private表示它所修饰的实体不允许外部访问,只能在当 ...

  9. Java学习笔记(三十五)

    在完成对C语言的学习后,我最近开始了对C++和Java的学习,目前跟着视频学习了一些语法,也跟着敲了一些代码,有了一定的掌握程度.现在将跟着视频做的笔记进行整理.本篇博客是整理Java知识点的第三十五 ...

  10. Java开发笔记(三十三)字符包装类型

    正如整型int有对应的包装整型Integer那样,字符型char也有对应的包装字符型Character.初始化字符包装变量也有三种方式,分别是:直接用等号赋值.调用包装类型的valueOf方法.使用关 ...

最新文章

  1. 这5家纳米技术公司正在推动医疗检测的变革
  2. HTML介绍及简单模式
  3. node --- 创建一个Socket客户端连接到服务器
  4. LinkedList剖析
  5. 单片机 串口 波特率 c语言 9600 11.0592mhz t1,PLC与单片机串口通信的实现
  6. Linux二进制实用工具Binutils工具集解析()
  7. 使用DistroTweaks复制您的自定义Linux设置
  8. 表格中序号怎计算机课程视频,【答疑】在Excel表格里输入了文字后怎么下拉顺序号啊?如何在表格里添加序号? - 视频教程线上学...
  9. java集合(5)-List集合
  10. xmlObj转为数组
  11. Microsoft SQL 2005 精简版 完整版
  12. LinUX接收蓝牙音频,Win10 v2004已重新支持蓝牙A2DP音频串流接收功能
  13. python制作日历并保存成excel_python台历代码--涉及知识点为Excel表格合并等操作
  14. 深度探索C++对象模型(一):关于对象
  15. PNP三极管作为开关管如何使用(集电极接 负载)
  16. 移动端touch事件和鼠标事件
  17. Windows 设置文件默认打开方式
  18. war包里面文件的修改方式
  19. 小马哥robofly四轴气压计定高的不完全解读
  20. Unity 之 发布字节抖音小游戏

热门文章

  1. epel源mysql版本_centos网络yum源和epel源(2017可用首选)
  2. 十一、Shell脚本流程控制语句
  3. IntelliJ IDEA创建和配置Maven项目并运行
  4. Filebeat 日志收集器 安装和配置
  5. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_8_使用try_catch_finally处理流中的异常...
  6. oracle触发器和存储过程的格式
  7. 牛客网——复杂字符串排序
  8. MVC数据验证Model Validation
  9. 团队开发——冲刺1.e
  10. 使用ZbarSDK实现扫描二维码以及条形码功能(iOS)