文字标签组件与图标

在 Swing 程序设计中,标签(JLabel)用于显示文本、图标等内容。在 Swing 应用程序的用户界面中,用户能够通过标签上的文本、图标等内容获得相应的提示信息。本节将对 Swing 标签的用法、如何创建标签和如何在标签上显示文本及图标等内容予以讲解。

JLabel标签

标签(JLabel)的父类是 JComponent 类。虽然标签不能被添加监听器,但是标签显示的文本、图标等内容可以被指定对齐方式。

使用 JLabel 类的构造方法可以创建多种标签,如显示只有文本的标签、只有图标的标签以及同时包含文本和图标的标签等。JLabel 类常用的构造方法如下。

  • public JLabel():创建一个不带图标或文本的标签。

  • public JLabel(Icon icon):创建一个带图标的标签。

  • public JLabel(Icon icon, int aligment):创建一个带图标的标签,并设置图标的水平对齐方式。

  • public JLabel(String text, int aligment):创建一个带文本的标签,并设置文本的水平对齐方式。

  • public JLabel(String text, Icon icon, int aligment):创建一个带文本和图标的 JLabel 对象,并设置文本和图标的水平对齐方式。

【例18.13】在窗体中显示文字标签(实例位置:资源包\TM\sl\18\13)

向 JPanel 面板中添加一个 JLabel 标签组件,在标签中显示 “这是一个JFrame窗体”。

import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;

public class JLabelTest extends JFrame {
	public JLabelTest() {
		Container container = getContentPane();
		// 创建一个标签
		JLabel jl = new JLabel("这是一个JFrame窗体");
		container.add(jl); // 将标签添加到容器中
		setSize(200, 100); // 设置窗体大小
		// 设置窗体关闭模式
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		setVisible(true); // 使窗体可见
	}

	public static void main(String args[]) {
		new JLabelTest(); // 创建MyImageIcon对象
	}
}

运行结果如图18.17所示。

image 2024 03 05 21 59 04 208
Figure 1. 图18.17 在窗体中显示文字标签

图标的使用

在 Swing 程序设计中,图标经常被添加到标签、按钮等组件上,使用 javax.swing.ImageIcon 类可以依据现有的图片创建图标。ImageIcon 类实现了 Icon 接口,它有多个构造方法,常用的如下。

  • public ImageIcon():创建一个 ImageIcon 对象,然后使用其调用 setImage(Image image) 方法设置图片。

  • public ImageIcon(Image image):依据现有的图片创建图标。

  • public ImageIcon(URL url):依据现有图片的路径创建图标。

【例18.14】在窗体中演示图标(实例位置:资源包\TM\sl\18\14)

创建 MyImageIcon 类,并继承 JFrame 类。首先在 MyImageIcon 类中创建 ImageIcon 对象,然后使用 ImageIcon 对象依据现有的图片创建图标,接着使用 public JLabel(String text, int aligment) 构造方法创建一个 JLabel 对象,最后使用 JLabel 对象调用 setIcon() 方法为标签设置图标。

import java.awt.Container;
import java.net.URL;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

public class MyImageIcon extends JFrame {
	public MyImageIcon() {
		Container container = getContentPane();
		//创建一个标签
		JLabel jl = new JLabel("这是一个JFrame窗体", JLabel.CENTER);
		//获取图片所在的URL
		URL url = MyImageIcon.class.getResource("pic.png");
		Icon icon = new ImageIcon(url); 		//创建Icon对象
		jl.setIcon(icon); 						//为标签设置图片
		//设置文字放置在标签中间
		jl.setHorizontalAlignment(SwingConstants.CENTER);
		jl.setOpaque(true); 					//设置标签为不透明状态
		container.add(jl); 						//将标签添加到容器中
		setSize(300, 200); 						//设置窗体大小
		setVisible(true); 						//使窗体可见
		//设置窗体关闭模式
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String args[]) {
		new MyImageIcon(); 						//创建MyImageIcon对象
	}
}

运行结果如图18.18所示。

java.lang.Class 类中的 getResource() 方法可以获取本类(编译后的 class 文件)所在的完整路径。

编程训练(答案位置:资源包\TM\sl\18\编程训练)

【训练7】全景地图 将十字路口4个方向的车况截图按2行2列显示在窗体中,效果如图18.19所示。

image 2024 03 05 22 02 56 501
Figure 2. 图18.18 使用图片文件创建图标
image 2024 03 05 22 03 22 463
Figure 3. 图18.19 同时显示4幅画面

【训练8】随机背景 有3幅图片,运行窗体时,将在这3幅图片中随机抽取一张作为窗体的背景图片。