欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-04-04 09:30:17
前面介绍了JavaFX标签控件的用法,其中提到Label文本支持中文字体,那么它到底支持哪些中文字体呢?自然要看当前的操作系统都安装了哪些字体才行,对于中文的Windows系统,默认安装了黑体“SimHei”、宋体“NSimSun”、仿宋“FangSong”与楷体“KaiTi”。在AWT与Swing ......

前面介绍了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>() { // 设置按钮的单击事件
			@override
			public 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); // 往流式窗格上添加按钮

 

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

Java开发笔记(一百三十八)JavaFX的箱子
接着创建一个垂直箱子,也往该箱子依次添加四个文本标签,相关的操作代码片段示例如下:

		button btn2 = new button("垂直排列"); // 创建一个按钮
		btn2.setonaction(new eventhandler<actionevent>() { // 设置按钮的单击事件
			@override
			public 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开发笔记(一百三十八)JavaFX的箱子



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