JPanel是一种没有边框,不能被移动、放大、缩小或关闭的非顶层容器,默认情况下是透明的,可以使用setOpaque()方法设置。与顶层容器不同的是,面板不能独立存在,必须被添加到其他容器内部。在进行界面设计时,通常将用户界面划分成若干个区域,每个区域用一个面板。这样处理的好处是:将窗口内容结构化,有利于管理、更换、调试。JPanel类的常用方法如表12.3所示。
常用方法 |
功能描述 |
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.5中,运行程序结果,先创建了JFrame窗体,然后设置布局,创建一个容器JPanel,最后将中间容器添加进JFrame窗体。在第14行代码,通过“new TitleBorder("面板区域");”设置了JPanel的边框和标题。
JScrollPane是一个带滚动条的面板容器,只能放置一个组件,并且不能使用布局管理器。它由下列部分组成:一个ViewPort、可选的垂直和水平滚动条、可选的行和列的头部,以及ViewPort对应显示的组件。如果需要在JScrollPane面板中放置多个组件,需要先将多个组件放置在JPanel面板容器上,然后将JPanel面板作为一个整体组件添加到JScrollPane面板中。JScrollPane类的常见方法如表12.4所示。
常见方法 |
功能描述 |
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中,在JTextArea文本区域组件不断输入内容回车,当内容超出滚动面板宽度和高度的时候,JScrollPane会出现横向和纵向滚动条。在第8行代码处设置了边界宽度,距离外部边界距离都是5px;第10行代码处设置了布局方式为BorderLayout,组件之间的水平和垂直距离都是0px。