JPanel是一种没有边框,不能被移动、放大、缩小或关闭的非顶层容器,默认情况下是透明的,可以使用setOpaque()方法设置。与顶层容器不同的是,面板不能独立存在,必须被添加到其他容器内部。在进行界面设计时,通常将用户界面划分成若干个区域,每个区域用一个面板。这样处理的好处是:将窗口内容结构化,有利于管理、更换、调试。JPanel类的常用方法如表12.3所示。
- JPanel类的常用方法
常用方法 |
功能描述 |
public JPanel() |
创建包括双缓冲和流布局的新Jpanel |
public JPanel(LayoutManager layout) |
创建包括指定布局管理器的新缓冲Jpanel |
public void setLocation(int x,int y) |
设置组件显示位置的左上角坐标为(x,y) |
public void setSize(int width,int height) |
设置组件的宽度和高度,单位是像素 |
表12.3中列举了JPanel类常用方法,接下来演示JPanel的使用,如例12-3所示。
例12-3 Demo1203.java
1import javax.swing.*;
2import javax.swing.border.*; // 导入标题边框需要的包
3
4public class Demo1203 {
5 public static void main(String[] args) {
6 JFrame jFrame=new JFrame("JPanel框架");
7 jFrame.setSize(300,200);
8 jFrame.setLocation(500,400);
9
10 JPanel jPanel=new JPanel(); //创建面板对象jPanel
11 jPanel.setSize(150,90);
12 jPanel.setLocation(50,40);
13 // 设置panel的边框和标题
14 jPanel.setBorder(new TitledBorder("面板区"));
15 jFrame.setLayout(null);
16 jPanel.setLayout(null);
17 jFrame.add(jPanel);
18
19 jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
20 jFrame.setVisible(true);
21 }
22}
程序的运行结果如图12.5所示。
- 例12-3运行结果
图12.5中,运行程序结果,先创建了JFrame窗体,然后设置布局,创建一个容器JPanel,最后将中间容器添加进JFrame窗体。在第14行代码,通过“new TitleBorder("面板区域");”设置了JPanel的边框和标题。
JScrollPane是一个带滚动条的面板容器,只能放置一个组件,并且不能使用布局管理器。它由下列部分组成:一个ViewPort、可选的垂直和水平滚动条、可选的行和列的头部,以及ViewPort对应显示的组件。如果需要在JScrollPane面板中放置多个组件,需要先将多个组件放置在JPanel面板容器上,然后将JPanel面板作为一个整体组件添加到JScrollPane面板中。JScrollPane类的常见方法如表12.4所示。
- JScrollPane类的常见方法
常见方法 |
功能描述 |
public JScrollPane() |
创建一个空的JScrollPane,水平和垂直滚动条都是可选项。 |
public JScrollPane(Component view, int x, int y) |
创建一个 JScrollPane,它将视图组件显示在一个视口中,视图位置可使用一对滚动条控制。 |
void setHorizontalBarPolicy(int policy) |
设置水平滚动条策略 |
void setVerticalBarPolicy(int policy) |
设置垂直滚动条策略 |
接下来通过一个案例来演示JScrollPane的使用,如例12-4所示。
例12-4 Demo1204.java
1import javax.swing.*;
2public class TestJScrollPane {
3 public static void main(String[] args) {
4 JFrame jf = new JFrame("JFrame窗口");
5 JPanel contentPane=new JPanel();;
6 JScrollPane jPanel;
7 JTextArea textArea=new JTextArea();
8 textArea.setText("请接下来输入内容,回车结束!");
9 jPanel.setBorder(new EmptyBorder(5,5,5,5));// 设置边距
10 jPanel.setLayout(new BorderLayout(0,0)); // 设置布局
11 jf.setContentPane(jPanel);
12 scrollPane=new JScrollPane();
13 jPanel.add(scrollPane,BorderLayout.CENTER);
14 scrollPane.setViewportView(textArea);
15 jf.setTitle("滚动面板的使用");
16 jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
17 jf.setBounds(100, 100, 250, 200);
18 jf.setVisible(true);
19 }
20}
程序的运行结果如图12.6所示。
- 例12-4运行结果
案例12-4中,在JTextArea文本区域组件不断输入内容回车,当内容超出滚动面板宽度和高度的时候,JScrollPane会出现横向和纵向滚动条。在第8行代码处设置了边界宽度,距离外部边界距离都是5px;第10行代码处设置了布局方式为BorderLayout,组件之间的水平和垂直距离都是0px。