常用面板

在 Swing 程序设计中,面板是一个容器,用于容纳其他组件,但将面板必须添加到其他容器中。Swing 中常用的面板包括 JPanel 面板和 JScrollPane 面板。下面将分别予以讲解。

JPanel面板

JPanel 面板继承 java.awt.Container 类。JPanel 面板必须在窗体容器中使用,无法脱离窗体显示。

【例18.11】在一个窗体中显示4种布局风格的面板(实例位置:资源包\TM\sl\18\11)

创建 JPanelTest 类,并继承 JFrame 类。首先设置窗体的布局管理器为2行2列的网格布局管理器,然后创建4个面板,并为这4个面板设置不同的布局管理器,最后向每个面板中添加按钮。

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class JPanelTest extends JFrame {
	public JPanelTest() {
		Container c = getContentPane();
		// 将整个容器设置为2行2列的网格布局,组件水平间隔10像素,垂直间隔10像素
		c.setLayout(new GridLayout(2, 2, 10, 10));
		// 初始化一个面板,此面板使用1行4列的网格布局,组件水平间隔10像素,垂直间隔10像素
		JPanel p1 = new JPanel(new GridLayout(1, 4, 10, 10));
		// 初始化一个面板,此面板使用边界布局
		JPanel p2 = new JPanel(new BorderLayout());
		// 初始化一个面板,此面板使用1行2列的网格布局,组件水平间隔10像素,垂直间隔10像素
		JPanel p3 = new JPanel(new GridLayout(1, 2, 10, 10));
		// 初始化一个面板,此面板使用2行1列的网格布局,组件水平间隔10像素,垂直间隔10像素
		JPanel p4 = new JPanel(new GridLayout(2, 1, 10, 10));
		// 给每个面板都添加边框和标题,使用BorderFactory工厂类生成带标题的边框对象
		p1.setBorder(BorderFactory.createTitledBorder("面板1"));
		p2.setBorder(BorderFactory.createTitledBorder("面板2"));
		p3.setBorder(BorderFactory.createTitledBorder("面板3"));
		p4.setBorder(BorderFactory.createTitledBorder("面板4"));
		// 在面板1中添加按钮
		p1.add(new JButton("b1"));
		p1.add(new JButton("b1"));
		p1.add(new JButton("b1"));
		p1.add(new JButton("b1"));
		// 向面板2中添加按钮
		p2.add(new JButton("b2"), BorderLayout.WEST);
		p2.add(new JButton("b2"), BorderLayout.EAST);
		p2.add(new JButton("b2"), BorderLayout.NORTH);
		p2.add(new JButton("b2"), BorderLayout.SOUTH);
		p2.add(new JButton("b2"), BorderLayout.CENTER);
		// 向面板3中添加按钮
		p3.add(new JButton("b3"));
		p3.add(new JButton("b3"));
		// 向面板4中添加按钮
		p4.add(new JButton("b4"));
		p4.add(new JButton("b4"));
		// 向容器中添加面板
		c.add(p1);
		c.add(p2);
		c.add(p3);
		c.add(p4);
		setTitle("在这个窗体中使用了面板");
		setSize(500, 300);// 窗体宽高
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); // 关闭动作
	}

	public static void main(String[] args) {
		JPanelTest test = new JPanelTest();
		test.setVisible(true);
	}
}

运行结果如图18.14所示。

image 2024 03 05 21 46 18 767
Figure 1. 图18.14 JPanel面板的应用

JScrollPane滚动面板

JScrollPane 面板是带滚动条的面板,用于在较小的窗体中显示较大篇幅的内容。需要注意的是,JScrollPane 滚动面板不能使用布局管理器,且只能容纳一个组件。如果需要向 JScrollPane 面板中添加多个组件,那么需要先将多个组件添加到 JPanel 面板中,再将 JPanel 面板添加到 JScrollPane 滚动面板中。

【例18.12】为窗体添加上下滚动条(实例位置:资源包\TM\sl\18\12)

创建 JScrollPaneTest 类,并继承 JFrame 类。首先初始化文本域组件,并指定文本域组件的大小;然后创建一个 JScrollPane 面板,并把文本域组件添加到 JScrollPane 面板中;最后把 JScrollPane 面板添加到窗体中。

import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;

public class JScrollPaneTest extends JFrame {
	public JScrollPaneTest() {
		Container c = getContentPane(); // 获取主容器
		// 创建文本区域组件,文本域默认大小为20行、50列
		JTextArea ta = new JTextArea(20, 50);
		// 创建JScrollPane滚动面板,并将文本域放到滚动面板中
		JScrollPane sp = new JScrollPane(ta);
		c.add(sp); // 将该面板添加到主容器中
		setTitle("带滚动条的文字编译器");
		setSize(400, 200);
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
	}

	public static void main(String[] args) {
		JScrollPaneTest test = new JScrollPaneTest();
		test.setVisible(true);
	}
}

运行结果如图18.15所示,图中文字内容是作者在编辑器窗口中输入的。

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

【训练5】创建指定外观的面板 创建如图18.16所示的载有具有特殊布局效果的面板的窗体。

【训练6】图像浏览器 将窗体的宽高设置为300 × 220,使用滚动面板实现通过滚动条查看完整图片。

image 2024 03 05 21 52 49 854
Figure 2. 图18.15 JPanel面板的使用
image 2024 03 05 21 53 12 520
Figure 3. 图18.16 特殊布局窗体