前面介绍了JavaFX的窗口框架,其中舞台、场景、窗格都能与AWT/Swing体系的相关概念一一对应,不仅如此,JavaFX的常见控件也能在Swing中找到相应的控件。比如JavaFX的按钮控件名叫Button,对应Swing的JButton,两种按钮提供的方法也类似,下面是Button控件的常用方法说明:
setText:设置按钮的文本。
setPrefSize:设置按钮的推荐宽高。
setAlignment:设置按钮的对齐方式。
setOnAction:设置按钮的单击事件。单击事件的类型为EventHandler<ActionEvent>,它的匿名内部类写法示例如下:

		EventHandler<ActionEvent> handler = new EventHandler<ActionEvent>() { // 创建按钮的单击事件
@Override
public void handle(ActionEvent arg0) { // 处理单击事件
// 这里补充单击按钮想要触发的代码逻辑
}
};

除了按钮之外,标签也是很常见的基础控件,JavaFX的标签控件名叫Label,对应Swing的JLabel。JavaFX的Label与JLabel一样,都支持在标签上显示文本和图像,二者的方法调用也大同小异。下面是Label控件的常用方法说明(get***方法可类推):

setText:设置标签的文本。
setPrefSize:设置标签的推荐宽高。
setAlignment:设置标签的对齐方式。
setFont:设置标签的字体。
setTextFill:设置标签的文本颜色。
setWrapText:设置标签文本是否支持自动换行。true表示支持,false表示不支持。
setBackground:设置标签的背景。
setGraphic:设置标签的图像。
由于Label控件与Button控件都继承自抽象类Labeled,因此上面的标签方法同样适用于按钮Button。
接下来准备在标签上显示文本与图像的各种效果,为此需要构建一个标签控件,具体的标签创建代码如下所示:

		Label label = new Label("这里查看文字效果\n这里查看文字效果"); // 创建一个标签
label.setPrefSize(400, 100); // 设置标签的推荐宽高
label.setAlignment(Pos.CENTER); // 设置标签的对齐方式
label.setWrapText(true); // 设置标签文本是否支持自动换行。true表示支持,false表示不支持

注意,JavaFX标签的文本换行并未采用Swing那套HTML标记的方式,而是通过换行符“\n”来手动换行。至于自动换行,则通过setWrapText方法来控制,只要调用该方法设置为true,那么一旦文本长度超过标签宽度,程序就会自动将多出的文字另起一行。
首先看给标签设置背景的代码例子,Label控件的setBackground不能直接输入颜色,而要输入Background对象,详细的背景设置代码示例如下:

		Button btn1 = new Button("背景黄色"); // 创建一个按钮
btn1.setOnAction(new EventHandler<ActionEvent>() { // 设置按钮的单击事件
@Override
public void handle(ActionEvent arg0) { // 处理单击事件
// 创建一个充满指定颜色的背景
Background bg = new Background(new BackgroundFill(Color.YELLOW, null, null));
label.setBackground(bg); // 设置标签的背景
}
});
flowPane.getChildren().add(btn1); // 往流式窗格上添加按钮

运行以上的背景色设置代码,单击按钮后的窗口界面如下图所示,可见标签区域的背景变为黄色。


再来看标签文字的颜色,JavaFX摒弃了所谓前景色的说法,转而采纳易于理解的文字颜色说法,也就是通过setTextFill方法设置文字颜色。下面是设置标签文本颜色的代码例子:

		Button btn2 = new Button("前景红色"); // 创建一个按钮
btn2.setOnAction(new EventHandler<ActionEvent>() { // 设置按钮的单击事件
@Override
public void handle(ActionEvent arg0) { // 处理单击事件
label.setTextFill(Color.RED); // 设置标签的文本颜色
}
});
flowPane.getChildren().add(btn2); // 往流式窗格上添加按钮

运行以上的文本颜色设置代码,单击按钮后的窗口界面如下图所示,可见标签内部的文本颜色变为红色。


JavaFX的Label同样支持中文字体,不过中文字体使用拼音表达,例如“KaiTi”表示楷体,“NSimSun”表示宋体,“FangSong”表示仿宋等等。下面是对标签中的汉字设置中文楷体的代码例子:

		Button btn3 = new Button("中文楷体"); // 创建一个按钮
btn3.setOnAction(new EventHandler<ActionEvent>() { // 设置按钮的单击事件
@Override
public void handle(ActionEvent arg0) { // 处理单击事件
// 创建一个40号大小且为楷体的字体对象,适用于汉字。注意JavaFX不支持对中文设置斜体或粗体
Font kaiti = Font.font("KaiTi", 40);
label.setFont(kaiti); // 设置标签的字体
}
});
flowPane.getChildren().add(btn3); // 往流式窗格上添加按钮

运行上面的字体设置代码,单击按钮后的窗口界面如下图所示,可见标签内的汉字以楷体书写,并且文字尺寸也变大了。


尽管JavaFX依然提供了粗体与斜体,可惜它不支持对中文设置粗体或斜体,只能对英文设置粗体与斜体。下面是对标签文本设置英文字体“Times New Roman”的代码例子,同时一并应用了粗体与斜体:

		Button btn4 = new Button("英文斜体"); // 创建一个按钮
btn4.setOnAction(new EventHandler<ActionEvent>() { // 设置按钮的单击事件
@Override
public void handle(ActionEvent arg0) { // 处理单击事件
label.setText("Hello World");
// 创建一个40号大小且又是斜体又是粗体的字体对象,适用于英文。注意英文不能使用中文字体
Font italic_bold = Font.font("Times New Roman", FontWeight.BOLD, FontPosture.ITALIC, 40);
label.setFont(italic_bold); // 设置标签的字体
}
});
flowPane.getChildren().add(btn4); // 往流式窗格上添加按钮

运行上面的字体设置代码,单击按钮后的窗口界面如下图所示,可见标签内的英文果然呈现又粗又斜的面貌,幸亏本身字体是规整的“Times New Roman”,还不至于扭得太难看。


再来看如何利用Label控件显示图像,完整的图像显示步骤分三步:
1、根据原始的图片文件构建Image图像实例;
2、依据Image图像实例创建图像视图ImageView的实例;
3、调用Label控件的setGraphic设置该标签的图像视图;
利用Label显示图像的详细代码如下所示:

		Button btn5 = new Button("显示图像"); // 创建一个按钮
btn5.setOnAction(new EventHandler<ActionEvent>() { // 设置按钮的单击事件
@Override
public void handle(ActionEvent arg0) { // 处理单击事件
// 创建一个图像
Image image = new Image(getClass().getResourceAsStream("apple.png"));
label.setGraphic(new ImageView(image)); // 设置标签的图像
label.setText(""); // 设置标签的文本
}
});
flowPane.getChildren().add(btn5); // 往流式窗格上添加按钮

运行上面的图像设置代码,单击按钮后的窗口界面如下图所示,可见此时的标签控件妥妥地变为一幅图画。


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

Java开发笔记(一百三十七)JavaFX的标签的更多相关文章

  1. Java开发笔记(三十七)利用正则串分割字符串

    前面介绍了处理字符串的常用方法,还有一种分割字符串的场景也很常见,也就是按照某个规则将字符串切割为若干子串.分割规则通常是指定某个分隔符,根据字符串内部的分隔符将字符串进行分割,例如逗号.空格等等都可 ...

  2. Java开发笔记(九十七)利用Runnable启动线程

    前面介绍了线程的基本用法,按理说足够一般的场合使用了,只是每次开辟新线程,都得单独定义专门的线程类,着实开销不小.注意到新线程内部真正需要开发者重写的仅有run方法,其实就是一段代码块,分线程启动之后 ...

  3. Java开发笔记(八十七)随机访问文件的读写

    前面介绍了字符流读写文件的两种方式,包括文件字符流和缓存字符流,但是它们的写操作都存在一个问题:不管是write方法还是append方法,都只能从文件开头写入,而不能追加到文件末尾或者在文件中间某个位 ...

  4. Java开发笔记(二十七)数值包装类型

    方法的出现缘起优化代码结构,但它的意义并不局限于此,正因为有了方法定义,编程语言才更像一门能解决实际问题的工具,而不仅仅是只能用于加减乘除的计算器.在数学的发展过程中,为了表示四则运算,人们创造了加减 ...

  5. Java开发笔记(三十)大小数BigDecimal

    前面介绍的BigInteger只能表达任意整数,但不能表达小数,要想表达任意小数,还需专门的大小数类型BigDecimal.如果说设计BigInteger的目的是替代int和long类型,那么设计Bi ...

  6. Java开发笔记(三十四)字符串的赋值及类型转换

    不管是基本的char字符型,还是包装字符类型Character,它们的每个变量只能存放一个字符,无法满足对一串字符的加工.为了能够直接操作一连串的字符,Java设计了专门的字符串类型String,该类 ...

  7. Java开发笔记(三十五)字符串格式化

    前面介绍了字符串变量的四种赋值方式,对于简单的赋值来说完全够用了,即便是两个字符串拼接,也只需通过加号把两个目标串连起来即可.但对于复杂的赋值来说就麻烦了,假设现在需要拼接一个很长的字符串,字符串内部 ...

  8. Java开发笔记(三十六)字符串的常用方法

    不管是给字符串赋值,还是对字符串格式化,都属于往字符串填充内容,一旦内容填充完毕,则需开展进一步的处理.譬如一段Word文本,常见的加工操作就有查找.替换.追加.截取等等,按照字符串的处理结果异同,可 ...

  9. Java开发笔记(三十八)利用正则表达式校验字符串

    前面多次提到了正则串.正则表达式,那么正则表达式究竟是符合什么定义的字符串呢?正则表达式是编程语言处理字符串格式的一种逻辑式子,它利用若干保留字符定义了形形色色的匹配规则,从而通过一个式子来覆盖满足了 ...

  10. Java开发笔记(三十九)日期工具Date

    Date是Java最早的日期工具,编程中经常通过它来获取系统的当前时间.当然使用Date也很简单,只要一个new关键字就能创建日期实例,就像以下代码示范的那样: // 创建一个新的日期实例,默认保存的 ...

随机推荐

  1. LeetCode 721. Accounts Merge

    原题链接在这里:https://leetcode.com/problems/accounts-merge/ 题目: Given a list accounts, each element accoun ...

  2. 关于System.BadImageFormatException

    什么是BadImageFormatException BadImageFormatException是当动态链接库 (DLL) 或可执行程序的文件映像无效时引发的异常. 可能的原因 如果动态链接库 ( ...

  3. 新版本Mariadb安装后相关问题的解决

    给新机器Ubuntu安装的Mariadb后无法登录,通过网上各种方法修改root用户密码,仍然无法解决,耗费几个小时! 经过看日志和查手册,发现原因如下: ubuntu确实安装没有启用root用户,所 ...

  4. 帝国cms7.5整合百度编辑器ueditor教程

    1.根据自己使用的帝国cms版本编码下载对应的ueditor版本 下载地址 http://ueditor.baidu.com/website/download.html#ueditor 2.解压附件, ...

  5. SpringBoot异步及线程池配置

    异步方法注解@Async 在SpringBoot中进行异步处理,可以使用异步注解@Async和@EnableAsync. @Async注解表示异步,如:@Async("asyncServic ...

  6. Windows下多个JDK版本的切换方法

    问题 因我之前在window中无法命令行输入,后来发现是电脑中存在多个JDK,导致设置混乱. 于是,我继续深入研究了当电脑存在多个JDK的情况下,如何设置想要的JDK版本. 步骤 1.更改环境变量 进 ...

  7. 第06组 Beta版本演示

    队名:福大帮 组长博客链接: https://www.cnblogs.com/mhq-mhq/p/12052263.html 作业博客 : https://edu.cnblogs.com/campus ...

  8. 2019软工实践_Alpha(事后诸葛亮)

    组长博客 感谢组长 总结思考 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 弥补Powerpoint中模板转换存在的缺陷,完善PPT模板一键转换的功能 ...

  9. ActionFilter、IAuthorizationFilter 权限验证重定向跳转到其它页面

    方法一: public class IsAllowAttribute: ActionFilterAttribute { public override void OnActionExecuting(A ...

  10. Redis系列 | Redis5.0 新特性