第二十章《Java Swing》第6节:中间容器

2023-01-04 12:20:41 来源:51CTO博客

​所有可以添加组件的组件都可以被称为“容器”,在Swing体系中,窗体可以被称为顶级容器,在顶级容器中还可以创建中间容器并用它们来存放其他组件,程序员也可以对中间容器单独设置布局管理器。Swing体系中,中间容器包括JPanel、JScollPane、JtabbedPane、JToolBar等,本小节将详细讲解中间容器的使用。


【资料图】

20.6.1面板JPanel

在Swing体系中用JPanel类来表示面板,面板就是一个最常见的中间容器。中间容器用来存放其他组件,其他组件如果放置在面板中时,通过setLocation()方法设置组件位置时,其位置是相对于面板的而不是相当于整个窗体而言的。下面的【例20_19】展示了使用JPanel作为中间容器的效果。​

【例20_19 JPanel的使用】

Exam20_19.java​

import javax.swing.*;import java.awt.*;class Exam20_19Frame extends JFrame{    JPanel jpn1;    JPanel jpn2;    JButton btn1,btn2;    public Exam20_19Frame(){        init();    }    private void init( ){        Container container = this.getContentPane();        container.setLayout(null);        btn1 = new JButton("按钮1");        btn1.setFont(new Font("微软雅黑", Font.PLAIN, 20));        btn1.setSize(100,40);        btn1.setLocation(0,0);        jpn1 = new JPanel(null);        jpn1.setSize(150,80);        jpn1.setLocation(50,50);        jpn1.setBorder(BorderFactory.createLineBorder(Color.BLACK,1));        jpn1.add(btn1);        btn2 = new JButton("按钮2");        btn2.setFont(new Font("微软雅黑", Font.PLAIN, 20));        btn2.setSize(100,40);        btn2.setLocation(0,0);        jpn2 = new JPanel(null);        jpn2.setSize(150,80);        jpn2.setLocation(250,50);        jpn2.setBorder(BorderFactory.createLineBorder(Color.BLACK,1));        jpn2.setBackground(Color.YELLOW);        jpn2.add(btn2);        container.add(jpn1);        container.add(jpn2);    }}public class Exam20_19 {    public static void main(String[] args) {        Exam20_19Frame frame = new Exam20_19Frame();        frame.setSize(500, 250);        frame.setLocationRelativeTo(null);        frame.setTitle("Exam20_19Frame");        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        frame.setVisible(true);    }}

【例20_19】的运行结果如图20-20所示。​

图20-20【例20_19】运行结果如图​

20.6.2滚动面板JScrollPane

JScrollPane被称为“滚动面板”,它的主要作用是盛放一些比较大的组件并为之添加滚动条,例如用滚动面板盛放文本区、表格、树形组件等。​

JScrollPane作为一个中间容器最主要的就是设置其滚动条显示策略,所谓滚动条显示策略就是规定滚动条在什么情况下被显示。滚动条策略由一个整数来表示,而这些整数都以ScrollPaneConstants类的静态属性来定义。下面的表20-11展示了代表各种滚动条策略的静态属性。​

表20-11 JScrollPane滚动条策略​

静态属性​

滚动条策略​

ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED ​

需要时显示垂直滚动条(默认)​

ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER​

从不显示垂直滚动条​

ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS​

总是显示垂直滚动条​

ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED ​

需要时显示水平滚动条(默认)​

ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER​

从不显示水平滚动条​

ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS​

总是显示水平滚动条​

程序员可以通过JScrollPane类的setVerticalScrollBarPolicy()方法来设置滚动面板的垂直滚动条策略,而通过setHorizontalScrollBarPolicy()方法来设置垂直滚动条的策略。下面的【例20_20】展示了JScrollPane设置垂直滚动条策略的几种效果,实际上设置水平滚动条也有同样的效果。​

【例20_20 设置垂直滚动条显示策略】

Exam20_20.java​

import javax.swing.*;import java.awt.*;class Exam20_20Frame extends JFrame{    JTextArea txa1;    JTextArea txa2;    JTextArea txa3;    JScrollPane jsp1;    JScrollPane jsp2;    JScrollPane jsp3;    public Exam20_20Frame(){        init();    }    private void init( ){        Container container = this.getContentPane();//获得窗体的主体区域        container.setLayout(null);        txa1 = new JTextArea();        txa1.setFont(new Font("微软雅黑", Font.PLAIN, 20));        txa1.setLineWrap(true);        jsp1 = new JScrollPane(txa1);        jsp1.setSize(150, 150);        jsp1.setLocation(50, 20);        //设置不显示垂直滚动条        jsp1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);        txa2 = new JTextArea();        txa2.setFont(new Font("微软雅黑", Font.PLAIN, 20));        txa2.setLineWrap(true);        jsp2 = new JScrollPane(txa2);        jsp2.setSize(150, 150);        jsp2.setLocation(250, 20);        //设置总是显示垂直滚动条        jsp2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);        txa3 = new JTextArea();        txa3.setFont(new Font("微软雅黑", Font.PLAIN, 20));        txa3.setLineWrap(true);        jsp3 = new JScrollPane(txa3);        jsp3.setSize(150, 150);        jsp3.setLocation(450, 20);        //设置需要时显示垂直滚动条        jsp3.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);        container.add(jsp1);        container.add(jsp2);        container.add(jsp3);    }}public class Exam20_20 {    public static void main(String[] args) {        Exam20_20Frame frame = new Exam20_20Frame();        frame.setSize(680, 250);        frame.setLocationRelativeTo(null);        frame.setTitle("Exam20_20Frame");        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        frame.setVisible(true);    }}

【例20_20】的运行结果如图20-21所示。​

图20-21【例20_20】运行结果​

从图20-21中可以看出:如果对滚动面板设置了不显示垂直滚动条,那么即使垂直方向不能显示出所有文本,滚动面板也不会出现垂直滚动条。​

20.6.3选项板JTabbedPane

选项板是由若干个选项卡组成的一个容器,使用选项板可以把各个组件摆放到不同的选项卡中,这样就能把一个窗体从形式上分成了好几部分,从而能够把一个窗体清楚的划分成不同的功能区域,并且还不增加窗体的面积。在Swing体系中使用JTabbedPane类来表示选项板。​

一个选项板是由多个选项卡组成的,程序员可以根据实际需要来为选项板灵活的添加选项卡。添加选项卡的方法是addTab(),addTab()方法不仅仅能够增加一个选项卡的组件,还可以指定这个选项卡的标题。需要强调:一个选项卡上只能添加一个组件,如果希望在选项卡上添加多个组件,可以先在选项卡上添加一个JPanel面板,然后在该面板上添加多个其他组件。​

为了让选项板正确的显示到窗体上,通常情况下都不会把窗体设置为空布局,而是采用窗体的默认布局方式,之后根据需要对每个选项卡上的JPanel面板单独进行布局设置。下面的【例20_21】展示了如何创建一个选项板。​

【例20_21 JtabbedPane的使用】

Exam20_21.java​

import javax.swing.*;import java.awt.*;class Exam20_21Frame extends JFrame{    JTabbedPane tbpMain;    JButton btn1,btn2;    JPanel jpn1;    JPanel jpn2;    public Exam20_21Frame(){        init();    }    private void init( ){        Container container = this.getContentPane();        this.setResizable(false);        tbpMain=new JTabbedPane();        jpn1 = new JPanel(null);        btn1=new JButton("按钮1");        btn1.setSize(100,30);        btn1.setLocation(50, 50);        btn1.setFont(new Font("微软雅黑", Font.PLAIN, 20));        jpn1.add(btn1);        jpn2 = new JPanel(null);        btn2=new JButton("按钮2");        btn2.setSize(100,30);        btn2.setLocation(50, 50);        btn2.setFont(new Font("微软雅黑", Font.PLAIN, 20));        jpn2.add(btn2);        tbpMain.addTab("选项卡一", jpn1);        tbpMain.addTab("选项卡二", jpn2);        container.add(tbpMain);    }}public class Exam20_21 {    public static void main(String[] args) {        Exam20_21Frame frame = new Exam20_21Frame();        frame.setSize(300, 350);        frame.setLocationRelativeTo(null);        frame.setTitle("Exam20_20Frame");        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        frame.setVisible(true);    }}

【例20_21】的运行结果如图20-22所示。​

图20-22【例20_21】运行结果​

本文字版教程还配有更详细的视频讲解,小伙伴们可以​​点击这里​​观看。

标签: 总是显示垂直滚动条 第二十章

上一篇:【环球播资讯】第二十章《Java Swing》第7节:对话框
下一篇:热点在线丨【服务器数据恢复】机房断电导致服务器raid模块损坏,raid5磁盘阵列崩溃,服务器不可用的数据恢复案例