常用面板
在 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所示。

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,使用滚动面板实现通过滚动条查看完整图片。

