前面介绍了AWT窗口及其面板的简单用法,其中展示出来的控件只有按钮一种,还有很多好用好玩的控件有待介绍。首先是文本标签Label,该控件用于显示一段平铺文本,它不花哨也不跳动,完全就是素面朝天的文本字符。不过,即便是文本,也能拥有鲜明的个性,犹如书法那样,可以横排也可以竖排,既可写在白纸上也可写在红纸上,还能以专门的字体来书写如楷书、行书、草书、隶书等等。这些彰显个性的功能,需要调用文本标签的相应方法来实现,下面是Label的常见方法说明:
setText:设置文本内容。
setAlignment:设置内部文本的对齐方式。Label.CENTER表示居中对齐,Label.LEFT表示向左对齐,Label.RIGHT表示向右对齐。
setPreferredSize:设置文本标签的推荐宽高。
setBackground:设置文本标签的背景颜色。
setForeground:设置文本标签的前景颜色,其实就是文字颜色。
setFont:设置文本的字体(包括样式与大小)。
这里需要补充描述一下AWT的颜色与字体用法,不光是标签Label,还有很多控件会用到颜色和字体。颜色用到了Color工具,并且Color类自带了几种颜色常量,包括白色Color.WHITE、灰色Color.GRAY、黑色Color.BLACK、红色Color.RED、粉红Color.PINK、橙色Color.ORANGE、黄色Color.YELLOW、绿色Color.GREEN、玫红Color.MAGENTA、青色Color.CYAN、蓝色Color.BLUE等。可是彩虹的七种颜色——赤橙黄绿青蓝紫,AWT居然没提供紫色的颜色常量,只好由程序员自己来计算紫色了。在计算机行业标准中,显示设备普遍采用RGB颜色模式,也就是以红、绿、蓝为三原色,三原色各取若干叠加起来,便形成万紫千红的花花世界。不料AWT的Color工具却采取另一种HSB色彩模式,这样还得先将大众熟知的RGB色值转换为HSB色值才行,转换过程调用的是RGBtoHSB方法,然后再调用getHSBColor方法根据HSB色值获得颜色实例。从RGB色值到最终可用的颜色实例,完整的转换代码如下所示:

	// 使用RGB数值获得AWT的颜色实例
private static Color getColor(int red, int green, int blue) {
// 把RGB色值转换为HSB色值数组
float[] hsbs = Color.RGBtoHSB(red, green, blue, null);
// 利用HSB色值获得AWT的颜色实例
Color color = Color.getHSBColor(hsbs[0], hsbs[1], hsbs[2]);
return color;
}

如此一来,给新定义的getColor方法填入具体的RGB数值,即可得到五颜六色的Color对象了。譬如紫光由红光与蓝光混合而成,那么只需下面一行代码就能获得紫光的颜色实例了:

				Color purple = getColor(255, 0, 255); // 红光与蓝光混合就变成了紫光

至于字体则用到了Font工具,它决定了文字的形状和大小,调用Font的构造方法之时,第二个参数表示文字的书写字体,包括默认的普通体Font.PLAIN、斜体Font.ITALIC、粗体Font.BOLD;第二个参数表示文字的大小,默认值为12,数值越大文字也越大。比如以下代码就分别创建了大号斜体与中号粗体共两种字体对象:

				// 创建一个30号大小且为斜体的字体对象
Font italic_big = new Font("大号斜体", Font.ITALIC, 30);
// 创建一个20号大小且为粗体的字体对象
Font bold_middle = new Font("中号粗体", Font.BOLD, 20);

接下来通过文本标签的相关方法,看看实际的界面展示效果。先在窗口的中间位置添加文本标签,准备通过该控件观察Label的文字变化效果,往面板添加标签的代码示例如下:

		Label label = new Label("这里查看文字效果"); // 创建一个文本标签
label.setAlignment(Label.CENTER); // 设置文本标签的对齐方式
label.setPreferredSize(new Dimension(300, 50)); // 设置文本标签的推荐宽高
Panel panelCenter = new Panel(); // 创建中央面板
panelCenter.add(label); // 在中央面板上添加文本标签
frame.add(panelCenter, BorderLayout.CENTER); // 把中央面板添加到窗口的中间位置

然后看给标签设置背景色的例子,下面代码调用了文本标签的setBackground方法:

		Panel panelTop = new Panel(); // 创建顶部面板
Button btn1 = new Button("背景黄色"); // 创建一个按钮
btn1.addActionListener(new ActionListener() { // 给按钮注册点击监听器
public void actionPerformed(ActionEvent e) { // 发生了单击事件
label.setBackground(Color.YELLOW); // 设置文本标签的背景颜色
}
});
panelTop.add(btn1); // 在顶部面板上添加按钮

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

再来看设置前景色的例子,下面代码调用了文本标签的setForeground方法:

		Button btn2 = new Button("前景红色"); // 创建一个按钮
btn2.addActionListener(new ActionListener() { // 给按钮注册点击监听器
public void actionPerformed(ActionEvent e) { // 发生了单击事件
label.setForeground(Color.RED); // 设置文本标签的前景颜色(即文字颜色)
}
});
panelTop.add(btn2); // 在顶部面板上添加按钮

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

抛开AWT自带的几种颜色,程序员自己定义紫色实例,并将文本标签的背景色设置为紫色,此时的调用代码如下所示:

		Button btn3 = new Button("背景紫色"); // 创建一个按钮
btn3.addActionListener(new ActionListener() { // 给按钮注册点击监听器
public void actionPerformed(ActionEvent e) { // 发生了单击事件
Color purple = getColor(255, 0, 255); // 红光与蓝光混合就变成了紫光
label.setBackground(purple); // 把标签背景设置为紫色
}
});
panelTop.add(btn3); // 在顶部面板上添加按钮

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

接着给标签文本设置大号斜体,利用setFont方法设置字体的代码示例如下:

		Button btn4 = new Button("大号斜体"); // 创建一个按钮
btn4.addActionListener(new ActionListener() { // 给按钮注册点击监听器
public void actionPerformed(ActionEvent e) { // 发生了单击事件
// 创建一个30号大小且为斜体的字体对象
Font italic_big = new Font("大号斜体", Font.ITALIC, 30);
label.setFont(italic_big); // 设置文本标签的字体及大小
}
});
panelTop.add(btn4); // 在顶部面板上添加按钮

运行上面的字体设置代码,单击按钮后的窗口界面如下图所示,可见标签文本变为斜体,同时文字也变大了不少。

最后给标签文本设置中号粗体,利用setFont方法设置字体的代码示例如下:

		Button btn5 = new Button("中号粗体"); // 创建一个按钮
btn5.addActionListener(new ActionListener() { // 给按钮注册点击监听器
public void actionPerformed(ActionEvent e) { // 发生了单击事件
// 创建一个20号大小且为粗体的字体对象
Font bold_middle = new Font("中号粗体", Font.BOLD, 20);
label.setFont(bold_middle); // 设置文本标签的字体及大小
}
});
panelTop.add(btn5); // 在顶部面板上添加按钮

运行上面的字体设置代码,单击按钮后的窗口界面如下图所示,可见标签文本变为粗体,同时文字也变大了一些。

另外,setBackground、setForeground、setFont这三个方法不单单为标签Label所用,按钮Button也能调用它们,举凡带文字的控件,都支持通过这三个方法来设置背景色、前景色与字体。


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

Java开发笔记(一百二十)AWT文本标签的更多相关文章

  1. Java开发笔记(二十四)方法的组成形式

    经过前面的学习,我们发现演示的Java代码越来越复杂,而且每个例子的代码都堆在入口方法main内部,这会导致如下问题:1.一个方法内部堆砌了太多的代码行,看着费神,维护起来也吃力:2.部分代码描述的是 ...

  2. Java开发笔记(二十五)方法的输入参数

    前面通过main方法介绍了方法的定义形式,对于方法的输入参数来说,还有几个值得注意的地方,接下来分别对输入参数的几种用法进行阐述.一个方法可以有输入参数,也可以没有输入参数,倘若无需输入参数,则方法定 ...

  3. Java开发笔记(二十六)方法的输出参数

    前面介绍了方法的输入参数,与输入参数相对应的则为输出参数,输出参数也被称作方法的返回值,意思是经过方法的处理最终得到的运算数值.这个返回值可能是整型数,也可能是双精度数,也可能是数组等其它类型,甚至允 ...

  4. Java开发笔记(二十八)布尔包装类型

    前面介绍了数值包装类型,因为不管是整数还是小数,它们的运算操作都是类似的,所以只要学会了Integer的用法,其它数值包装类型即可一并掌握.但是对于布尔类型boolean来说,该类型定义的是“true ...

  5. Java开发笔记(二十九)大整数BigInteger

    早期的编程语言为了节约计算机的内存,给数字变量定义了各种存储规格的数值类型,比如字节型byte只占用一个字节大小,短整型short占用两个字节大小,整型int占用四个字节大小,长整型long占用八个字 ...

  6. Java开发笔记(二十)一维数组的用法

    之前介绍的各类变量都是单独声明的,倘若要求定义相同类型的一组变量,则需定义许多同类型的变量,显然耗时耗力且不宜维护.为此,编程语言引入了数组的概念,每个数组都由一组相同类型的数据构成,对外有统一的数组 ...

  7. Java开发笔记(二十二)神奇的冒号

    Java中的标点符号主要有两类用途,一类是运算符,包括加号+.减号-.乘号*.除号/.取余号%.等号=.大于号>.小于号<.与号&.或号|.非号!.异或号^等等,另一类则是分隔符, ...

  8. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  9. Java开发笔记(三十二)字符型与整型相互转化

    前面提到字符类型是一种新的变量类型,然而编码实践的过程中却发现,某个具体的字符值居然可以赋值给整型变量!就像下面的例子代码那样,把字符值赋给整型变量,编译器不但没报错,而且还能正常运行! // 字符允 ...

  10. Java开发笔记(八十二)注解的基本单元——元注解

    Java的注解非但是一种标记,还是一种特殊的类型,并且拥有专门的类型定义.前面介绍的五种内置注解,都可以找到对应的类型定义代码,例如查看注解@Override的源码,发现它的代码定义是下面这样的: @ ...

随机推荐

  1. 将idea中xml文件背景颜色去除(转)

    原贴链接:https://blog.csdn.net/weixin_43215250/article/details/89403678 第一步:除去SQL代码块的背景颜色,步骤如下 设置后还是很影响视 ...

  2. Visual C++ 里的异常处理

    微软Visual C++是Win32最广泛使用的编译器,因此Win32反向器对其内部工作非常熟悉.能够识别编译器生成的粘合代码有助于快速集中于程序员编写的实际代码.它还有助于恢复程序的高级结构.我将集 ...

  3. mysql ERROR 1862 (HY000): 密码超时错误解决 Your password has expired.To log in you must change it using a client that supports expired password

    工具链接可能报错,使用黑窗口链接后: 1. SET PASSWORD = PASSWORD("xinmima"); 2. flush privileges; 使用新密码链接即可.

  4. 解决Ubuntu系统下 mysql 远程连接失败的问题 ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xx.xx' (110)

    如果远程连不上mysql.cnf 里面也修改了:bind注销掉了127.0.0.1 等所有的 但是telnet xxx.xxx.xx.xx 3306 端口 不通:那么 就是防火墙的问题了 1.修改Ub ...

  5. 【loj2985】【WC2019】I君的商店

    题目 交互题: 有\(n\)个物品,每个物品的价格为0或者1; 给出为1的物品的个数奇偶性k,并保证至少有一个价格为1: 每次可以询问一个集合S的另一个集合T的价值和的大小,交互库会返回>=或者 ...

  6. GoCN每日新闻(2019-09-30)

    GoCN每日新闻(2019-09-30) 1. 使用Sqlmock测试数据库 https://medium.com/ralali-engineering/testing-database-using- ...

  7. mysql sum()函数 , 计算总和

    mysql> select * from table1; +----------+------------+-----+---------------------+ | name_new | t ...

  8. spring-JDBC模板

    Spring的JDBC的模板 Spring是EE开发的一站式的框架,有EE开发的每层的解决方案. Spring对持久层也提供了解决方案:ORM模块和JDBC的模板. Spring提供了很多的模板用于简 ...

  9. 剑指offer:二叉搜索树与双向链表

    题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 思路分析: 这道题一开始的思路是借用队列结构,首先中序遍历二叉树,按顺序 ...

  10. eos的资源和工具列表

    1.eos买rex的时候同时获得投票收益: https://b1.run/eosproxy eos的投票衰减规则: Block.one 希望确保用户经常更新他们的投票设定,而不是设置完就不管了.为了促 ...