《图形界面设计》PPT课件.ppt
第十二章 图形用户界面,吴冬芹金陵学院信息科学与工程学院,2,主要内容,一、图形用户界面 二、图形用户界面工具包(Swing)三、创建组件 四、布局管理器,图形用户界面,图形用户界面(Graphics User Interface,GUI)用图形的方式,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出指令、启动操作,并将系统运行的结果同样以图形方式显示给用户的技术。Java的GUI程序设计是Java程序设计的基础。Java提供的两个处理图形用户界面的类库Java.awt包 和 javax.swing包,抽象窗口工具集,awt的扩展,根据给定环境调整外观和感觉。,图形用户界面,1996年,Sun公司和Netsacpe公司在一个称为Swing的项目中合作完善了Netsacpe公司原来开发的一套GUI库,也就是现在所谓的Swing组件。JFC(Java Foundation Class)的概念是在1997年的JavaOne开发者大会上首次提出的,是指用于构建GUI的一组API。实际上,Swing只是JFC的一部分,其他的还有二维图形(Java 2D)API以及拖放(Drag and Drop)API等。,图形用户界面,Swing工具包作为AWT的扩展,并以AWT为基础Swing跨平台的灵活性,可以根据给定环境而调整他们的外观和感觉。重型组件AWT组件通常称为重型组件,因为它在运行时需要一个与平台相关的本地组件为之服务。轻型组件Swing组件是纯Java编写的,不直接使用本地组件,所以通常称为轻型组件。Swing组件类的名字开头都有前缀”J”,6,主要内容,一、图形用户界面二、图形用户界面工具包(Swing)三、创建组件 四、布局管理器,Swing,Java图形用户界面的基本元素主要由图形用户界面工具包Swing提供。Java图形用户界面的基本元素包括:用户界面组件(组件类)、事件处理模块(事件类)、图形和图像工具(图形类、图像类)、布局管理器(布局类)等。它们主要在javax.swing包中。java组件类的继承关系见教材图12.1,1、Swing组件分类,构成图形用户界面的类可以分为三组:(1)容器类(container class),包含其他组件的类顶层容器,能独立存在,是可以独立的窗口,JFrame,JApplet,JDialog非顶层容器,不能独立存在,不是独立的窗口,它们必须位于窗口之内,非顶层容器包括JPanel及JScrollPanel等一般独立应用程序使用JFrame,在上面放置Jpanel面板如果应用到浏览器中,使用JApplet,1、Swing组件分类,(2)辅助类(helper class)用来描述组件属性的,辅助类通常包含在java.awt包中.(3)组件类(component class)所有Swing GUI组件类(除JFrame、JApplet和JDialog)都是JComponent类的子类例如,JButton、JTextField、JTextArea、JComboBox、JList、JRadioButton和JMenu等,Swing容器的层次关系,一般的Swing窗口,实际上包含几个“层次”它是Java应用程序的顶层容器。,顶层容器JFrame,根窗格,分层窗格,内容窗格,玻璃窗格,JFrame特点JFrame的内容窗格利用getContentPane()方法获取的Container类的对象。JFrame类对象显示效果是一个“窗口”,带有标题栏和尺寸重置角标iconImage图标对象。图像类型是image,使用ImageIcon类创建图标对象。JMenuBar是框架的可选菜单默认为不可见,setVisible(true)方法使之可见默认的布局管理器是BorderLayout,使用setLayout()方法改变布局其他方法:setLocation()、setSize()、setBounds(),2、框架类JFrame,2、框架类JFrame,框架窗口的创建。,import java.awt.Color;/加载java.awt包里的颜色类Colorimport java.awt.Image;/加载java.awt包里的图像类Imageimport javax.swing.*;/加载javax.swing包里的所有类public class App12_1 static JFrame jfrm=new JFrame(这是个Swing程序);/创建静态框架并设置标题 public static void main(String args)JLabel lab=new JLabel(我是一个标签);/创建一个标签对象lab Image im=(new ImageIcon(中国心.jpg).getImage();/创建图标对象im jfrm.setIconImage(im);/设置窗口的显示图标 jfrm.setSize(250,140);/设置框架大小 jfrm.setBackground(Color.YELLOW);/设置框架背景颜色为黄色 jfrm.setLocation(260,150);/设置窗口的位置 jfrm.add(lab);jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jfrm.setVisible(true);,2、框架类JFrame,jfrm.setSize(250,140);/设置框架大小 jfrm.setLocation(260,150);/设置窗口的位置,(0,0),260,150,3、JPanel面板类,面板一种没有标题栏、没有边框的中间层容器面板不是顶层容器,必须放到其他容器内,也可以放入另一个面板内。Jpanel可以容纳其他组件,一般用于布局和定位默认的布局管理器FlowLayout,可以使用setLayout()改变默认布局管理器,import javax.swing.*;/加载javax.swing包里的所有类import javax.swing.border.TitledBorder;/加载包里的TitledBorder类public class App12_2 public static void main(String args)JFrame jfrm=new JFrame(我的框架);/创建框架对象jfrm jfrm.setSize(210,180);jfrm.setLocation(500,400);JPanel jpan=new JPanel();/创建面板对象jpan jpan.setSize(120,90);jpan.setLocation(40,30);JButton bun=new JButton(点击我);/创建命令按钮对象bun bun.setSize(80,20);bun.setLocation(20,30);jfrm.setLayout(null);/取消窗口jfrm的默认布局管理器 jpan.setLayout(null);/取消面板jpan的默认布局管理器 jpan.add(bun);/将命令按钮加入到面板中 jpan.setBorder(new TitledBorder(面板区);/为面板对象jpan设置边框 jfrm.add(jpan);/将面板对象jpan加入到窗口中 jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jfrm.setVisible(true);,3、颜色类,用Color类的对象来控制每个Color对象代表一种颜色,用户可以直接使用Color类中定义好的颜色常量也可以通过调配红、绿、蓝三色的比例创建自己的Color对象Color类中定义有如下的三种构造函数public Color(int Red,int Green,int Blue);public Color(float Red,float Green,float Blue);public Color(int RGB);Java.awt包中的常用类:import java.awt.Color;,3、颜色类,不论用哪个构造函数创建Color对象,都指定新建颜色中R(红)、G(绿)、B(蓝)三色的比例public Color(int Red,int Green,int Blue);通过三个整型参数指定R,G,B,每个参数的取值范围在0255之间public Color(float Red,float Green,float Blue);通过三个浮点参数指定R,G,B,每个参数的取值范围在0.01.0之间public Color(int RGB);通过一个整型参数指明其RGB三色比例这个参数的07比特(取值范围为0255)代表红色的比例,815比特代表绿色的比例,1623比特代表蓝色的比例。,例如下面的语句创建的是蓝色Color blueColor=new Color(0,0,255);,3、颜色类,除了创建自己的颜色,也可以直接使用Color类中定义好的颜色常量,如 jfrm.setBackground(Color.YELLOW);frm.setBackground(new Color(200,255,255);Color类中共定义了13种静态颜色常量包括black,orange,pink,grey等使用时只需以Color为前缀,非常方便建议用大写,参数取值0255,越大则表明这种颜色的成分越重。,3、颜色类,对于GUI的控制组件,它们有四个与颜色有关的方法分别用来设置和获取组件的背景色和前景色public void setBackground(Color c)public Color getBackground()public void setForeground(Color c)public Color getForeground(),4、字体类,字体类Font用来规范组件所用的字体样式、大小与字形等。构造方法:Font(String font_name,int style,int size),字体名称,字形样式:PLAIN、BOLD、ITALIC,字号大小,Java.awt包中的常用类:import java.awt.Font;设置字体:组件.setFont(Font font);Font fnt=new Font(Serief,Font.BOLD+Font.ITALIC,20);frm.setFont(fnt);,5、图像图标类,图像图标类ImageIconJava语言使用类表示图标支持3种图像格式:GIF、JPEG、PNG Image im=(new ImageIcon(中国心.jpg).getImage();/创建图标对象im jfrm.setIconImage(im);/设置窗口的显示图标,22,主要内容,一、图形用户界面 二、图形用户界面工具包(Swing)三、创建组件 四、布局管理器,1、标签JLabel,标签是用户不能修改只能查看其内容的文本显示区域,它起到信息说明的作用每个标签用一个Label类的对象表示创建标签对象时应同时说明这个标签中的字符串:JLabel jlab=new JLabel(我是一个标签,JLabel.CENTER);水平对齐方式,可以单独设置也可以在创建时声明,一般有JLabel.LEFT,JLabel.RIGHT,JLabel.CENTER垂直对齐方式,有JLabel.TOP,JLabel.BOTTOM,JLabel.CENTER,1、标签JLabel,在框架窗口中加入标签,并设置框架的底色及标签上文字的颜色和字体。,import java.awt.*;import javax.swing.*;public class App12_3 public static void main(String args)JFrame jfrm=new JFrame(标签类窗口);JLabel jlab=new JLabel(我是一个标签,JLabel.CENTER);/创建标签对象 jfrm.setLayout(null);/取消页面设置 jfrm.setSize(300,200);/设置窗口的大小 jfrm.setBackground(Color.PINK);/设置窗口的底色为粉红色 jlab.setOpaque(true);/设置标签为不透明的 jlab.setBackground(Color.YELLOW);/设置标签底色为黄色 jlab.setForeground(Color.RED);/设置标的前景色为红色 jlab.setLocation(80,60);jlab.setSize(130,30);Font fnt=new Font(Serief,Font.BOLD+Font.ITALIC,20);/创建字体对象 jlab.setFont(fnt);/用创建的字体对象设置标签上的字体 jfrm.add(jlab);jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jfrm.setVisible(true);,1、标签JLabel,在框架窗口中加入指定大小的标签,并设置当鼠标悬停在标签上时给出相应的提示信息。,import java.awt.*;import javax.swing.*;public class App12_4 public static void main(String args)JFrame jfrm=new JFrame(标签类窗口);JLabel jlab=new JLabel(我是一个标签,JLabel.CENTER);/创建标签对象 jfrm.setLayout(null);/取消页面设置 jfrm.setSize(300,200);jfrm.setBackground(Color.PINK);Container c=jfrm.getContentPane();/获取jfrm的内容窗格 c.setBackground(Color.PINK);/设置内容窗格的背景色为粉红色 jlab.setOpaque(true);/设置标签为不透明的 jlab.setBackground(Color.YELLOW);jlab.setForeground(Color.RED);jlab.setLocation(80,60);jlab.setSize(130,30);jlab.setToolTipText(我被设置为不透明状态);/为标签设置工具提示信息 Font fnt=new Font(Serief,Font.BOLD+Font.ITALIC,20);jlab.setFont(fnt);jfrm.add(jlab);jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jfrm.setVisible(true);,2、命令按钮JButton(javax.swing),用户用鼠标单击它来控制程序运行的流程。JButton创建后通过容器的add()将其放入容器。举例:在框架窗口中加入按钮。,import javax.swing.*;public class App12_5 extends JFrame/指定App12_5继承自JFrame类 public static void main(String args)App12_5 jfrm=new App12_5();/用App12_5类创建框架对象jfrm jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);ImageIcon ic=new ImageIcon(中国灯笼.jpg);/创建图标对象ic JButton btn=new JButton(灯笼,ic);/创建具有文字和图标按钮对象 jfrm.setLayout(null);/取消页面设置 jfrm.setSize(200,180);jfrm.setTitle(按钮类窗口);btn.setBounds(50,45,100,40);/设置按钮的大小与位置 btn.setToolTipText(我是按钮);jfrm.add(btn);jfrm.setVisible(true);,3、复选框JCheck和单选按钮JRadioButton,JCheckBox和JRadioButton(javax.swing)JCheckBox可以单独使用而单选按钮必须配合javax.swing包中的ButtonGroup类将其组成单选按钮组来使用。举例:在框架窗口内加入复选框和单选按钮组。,3、复选框JCheck和单选按钮JRadioButton,import javax.swing.*;public class App12_6 extends JFrame static JFrame frm=new JFrame(复选框和单选按钮组选取框);static JCheckBox jchk1=new JCheckBox(粗体,true);/初始状态为选中 static JCheckBox jchk2=new JCheckBox(斜体);static JCheckBox jchk3=new JCheckBox(下划线);static JRadioButton jrb1=new JRadioButton(红色);static JRadioButton jrb2=new JRadioButton(绿色,true);static JRadioButton jrb3=new JRadioButton(蓝色);,3、复选框JCheck和单选按钮JRadioButton,public static void main(String args)ButtonGroup grp=new ButtonGroup();/创建一个单选按钮组对象 frm.setLocation(200,150);frm.setSize(300,220);frm.setLayout(null);jchk1.setBounds(20,20,150,20);jchk2.setBounds(20,40,150,20);jchk3.setBounds(20,60,150,20);jrb1.setBounds(20,80,150,20);/设置单选按钮jrb1的位置和大小 jrb2.setBounds(20,100,150,20);jrb3.setBounds(20,120,150,20);grp.add(jrb1);/将jrb1加入到单选按钮组grp中使之成为单选按钮 grp.add(jrb2);grp.add(jrb3);frm.add(jchk1);frm.add(jchk2);frm.add(jchk3);frm.add(jrb1);frm.add(jrb2);frm.add(jrb3);frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setVisible(true);,4、文本编辑组件与滚动窗格,文本行组件JTextField主要用于接收用户键盘输入的文本密码文本行组件JPasswordField主要用于输入密码文本区组件JTextArea 通常与滚动窗格组件JScrollPane一起使用,4、文本编辑组件与滚动窗格,在框架窗口中加入文本编辑组件,并利用滚动窗格实现文本区的滚动功能。,import javax.swing.*;public class App12_7 extends JFrame JTextField jtf=new JTextField(该文本框不可编辑,30);static JPasswordField jpf=new JPasswordField(太空人3号,30);public App12_7(String str)/构造方法 super(str);/调用父类JFrame的构造方法 jtf.setBounds(20,40,140,20);jtf.setEditable(false);/设置文本行对象jtf为不可编辑 add(jtf);/将文本行对象jtf加入到窗口中,4、文本编辑组件与滚动窗格,public static void main(String args)App12_7 frm=new App12_7(文本编辑功能窗口);/调用App12_7类构造方法 JTextArea jta=new JTextArea(您好,10,30);/创建10行30列的文本区对象jta JScrollPane jsp=new JScrollPane(jta);/显示内容是文本区对象jfa frm.setLocation(200,150);frm.setSize(240,220);frm.setLayout(null);/取消页面设置 jsp.setBounds(20,70,160,100);/设置滚动窗格的大小 jpf.setBounds(20,10,140,20);frm.add(jpf);frm.add(jsp);/将滚动窗格对象jsp放入到窗口frm中 char password=jpf.getPassword();/获取密码框中的内容 String str=new String(password);/将密码转换成文本 System.out.println(今天口令是:+password+转换成文本后是:+str);frm.setVisible(true);frm.setResizable(false);/设置窗口不可改变大小 frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,5、选项窗格,选项窗格JTabbedPaneJTabbedPane组件中允许包含多个选项卡。,在窗口中放置一个选项窗格,并在选项窗格中添加若干个选项卡,每个选项卡中放置一个带有图形的标签组件。,5、选项窗格,import javax.swing.*;public class App12_8 extends JFrame JTabbedPane jtab=new JTabbedPane(JTabbedPane.TOP);/创建选项窗格,选项卡标题在上方 public App12_8()JLabel lab=new JLabel6;/声明JLabel数组 Icon pic;/声明图片变量pic String title;/声明选卡标题变量 for(int i=1;i=5;i+)pic=new ImageIcon(t+i+.jpg);/创建图片对象pic labi=new JLabel();labi.setIcon(pic);/设置标签对象labi上的图标 title=第+i+页;/设置选项卡的标题 jtab.add(title,labi);/设置选项卡标题为title,并将标签labi添加到选项卡jtab中 this.add(jtab);/将选项卡对象jtab添加到窗口中,public static void main(String args)App12_8 frm=new App12_8();frm.setTitle(选项卡的应用);frm.setSize(300,300);frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setVisible(true);,35,主要内容,一、图形用户界面 二、图形用户界面工具包(Swing)三、创建组件四、布局管理器,36,布局管理,在前面的例子中,基本组件仅仅被简单地加入容器如果程序需要进一步考虑如何设计和控制这些组件在容器中的位置和相互关系,就需要使用布局管理,0,1,2,4,3,5,4,0,1,5,3,4,布局管理,布局管理即页面管理。页面管理(layout):指窗口上的组件遵循一定的规则来排列,并会随着窗口大小的变化来改变组件大小与位置的一种布局方式。自动布局:当为一个容器指定一个布局管理器后,将一个组件加入该容器中时,布局管理器就能自动设置该组件的大小和位置。Java语言提供了多种布局管理器,每个布局管理器对应一种布局策略,,布局管理,java.awt包中共定义了五种布局管理器分别是:流式布局管理器FlowLayout边界式布局管理器BorderLayout卡片式布局管理器CardLayout网格式布局管理器GridLayout网袋布局管理器GridBagLayout。Javax.swing包中主要提供了盒式布局管理器重叠布局管理器弹簧布局管理器,1、流式布局管理器,FlowLayout布局策略组件按照加入容器的先后顺序从左向右排列;一行排满后就自动地转到下一行继续从左向右排列;每一行中的组件都居中排列。FlowLayout布局管理器是Panel、Applet和JPanel默认的布局管理方式。布局管理器的容器中的组件大小不随容器大小的变化而改变.,1、流式布局管理器,FlowLayout类构造方法public FlowLayout()创建流式布局管理器,容器中对象居中对齐,对象水平和垂直间距均默认为5个像素;public FlowLayout(int align)创建使用指定对齐方式的流式布局管理器,其他同上public FlowLayout(int align,int hgap,int vgap)创建具有指定间距的流式布局管理器,其余同上,FlowLayout.LEFT 每行的组件靠左对齐FlowLayout.CENTER 每行的组件居中排列FlowLayout.RIGHT 每行的组件靠右对齐,1、流式布局管理器,效果范例,1、流式布局管理器,流式布局管理器FlowLayout类的应用,import java.awt.*;import javax.swing.*;public class App12_9 extends JFrame static JFrame frm=new JFrame(流式布局设置管理器FlowLayout);public static void main(String args)FlowLayout flow=new FlowLayout(FlowLayout.CENTER,5,10);JButton but=new JButton(按钮);JLabel lab=new JLabel(我是一个标签);frm.setLayout(flow);/设置页面布局为流式布局方式 frm.setSize(260,150);frm.add(but);/添加命令按钮组件 frm.add(lab);/添加标签组件 frm.add(new JTextField(流式布局策略FlowLayout,18);/添加文本框组件 frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setVisible(true);,2、边界式布局管理器BorderLayout,BorderLayout将显示区域按地理方位分为东(East)、西(West)、南(South)、北(North)、中(Center)五个区域。将组件加入容器中,若没有指定区域,则默认为中间;若将组件加入到已被占用的位置,将会取代原先的组件。利用add()添加组件时必须指出组件的摆放位置。,2、边界式布局管理器BorderLayout,BorderLayout类的构造方法public BorderLayout()创建BorerLayout布局管理器,容器间各对象没有间隔public BorderLayout(int hgap,int vgap)各组件间水平间隔为hgap个像素,垂直间隔为 vgap个像素,2、边界式布局管理器BorderLayout,边界式布局管理器BorderLayout类的应用。,import java.awt.*;import javax.swing.*;public class App12_10 extends JFrame static JFrame frm=new JFrame(边界式布局管理器BorderLayout);public static void main(String args)BorderLayout border=new BorderLayout(5,10);frm.setLayout(border);/设置页面布局为边界式布局方式 frm.setSize(330,200);frm.add(new JButton(上北),BorderLayout.NORTH);frm.add(new JButton(下南),BorderLayout.SOUTH);frm.add(new JButton(左西),BorderLayout.WEST);frm.add(new JButton(右东),BorderLayout.EAST);frm.add(new JButton(中央),BorderLayout.CENTER);frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setVisible(true);,3、网格式布局管理器GridLayout,规则:将容器的空间划分成若干行与列的网格形式,在容器上添加组件时,它们会按从左到右、从上到下的顺序在网格中均匀排列。通过行列、间距来用网格分割,把组件放入网格中,先行后列摆放组件容器中各组件的宽度相同,所有组件的高度也相同,当容器尺寸发生变化时,各组件的相对位置不变。网格的行数和列数可以在创建GridLayout对象的构造方法里指定。若控件数正好是行列,则按行、列数放置;若控件数超过了行列,则先满足行。,3、网格式布局管理器GridLayout,GridLayout类构造方法public GridLayout()创建一个网格布局管理器,使用默认值,每行一个组件;public GridLayout(int rows,int cols)创建一个包含rows行cols列的网格布局管理器public GridLayout(int rows int cols,int hgap,int vagp)创建一个包含rows行cols列的网格布局管理器,水平间距为hgap像素,垂直间距为vgap个像素,3、网格式布局管理器GridLayout,利用GridLayout设计一个简单的计算器。本例的思想是创建两个容器,一个是面板,另一个是窗口,首先把命令按钮摆放在面板中,然后再把标签和面板放入窗口中。,import java.awt.*;import javax.swing.*;public class App12_11 extends JFrame static JPanel pan=new JPanel();/创建一个面板对象pan static JTextField tf=new JTextField(0.);static JButton b=new JButton10;/声明按钮数组b static JButton bp,ba,bs,bm,bd,be;public static void main(String args)App12_11 frm=new App12_11();for(int i=0;i=9;i+)bi=new JButton(+i);/创建按钮对象并设置其上显示的数字 bp=new JButton(.);ba=new JButton(+);bs=new JButton(-);bm=new JButton(*);bd=new JButton(/);be=new JButton(=);frm.setTitle(网格式布局管理器GridLayout);frm.setLayout(null);/取消窗口的页面设置 frm.setSize(300,220);frm.setResizable(false);/设置窗口的大小为不可改变 GridLayout grid=new GridLayout(4,4);/创建4行4列的页面配置 pan.setLayout(grid);/将面板对象pan的布局策略设为网格布局方式 tf.setBounds(35,15,200,25);pan.setBounds(35,50,200,120);tf.setBackground(Color.CYAN);/设置文本框的颜色 tf.setHorizontalAlignment(JTextField.RIGHT);/设置文本框中的文字右对齐,3、网格式布局管理器GridLayout,利用GridLayout设计一个简单的计算器。本例的思想是创建两个容器,一个是面板,另一个是窗口,首先把命令按钮摆放在面板中,然后再把标签和面板放入窗口中。,pan.add(b7);pan.add(b8);pan.add(b9);pan.add(bd);pan.add(b4);pan.add(b5);pan.add(b6);pan.add(bm);pan.add(b1);pan.add(b2);pan.add(b3);pan.add(bs);pan.add(b0);pan.add(bp);pan.add(be);pan.add(ba);frm.add(tf);frm.add(pan);frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setVisible(true);,4、卡片式布局管理器CardLayout,布局方式把“窗口容器”中的所有组件如同堆叠起来的一付“扑克牌”,每次只能显示最上面的一张一样,这个被显示的组件将占据所有的容器空间。该布局方式每次仅有一个组件是可见的。使用add()往窗口容器中加入组件时应为每个组件赋予一个名字。依据这个名字利用CardLayout类所提供的方法来控制其他组件是否显示。,4、卡片式布局管理器CardLayout,CardLayout构造方法public CardLayout()创建CardLayout,容器中对象没有间距CardLayout(int hgap,int vgap)创建CardLayout布局管理器,设置组件与容器边缘的水平间距为hgap,垂直间距为vgap个像素,4、卡片式布局管理器CardLayout,import java.awt.*;import javax.swing.*;public class App12_12 extends JFrame static JFrame frm=new JFrame(卡片式布局设置管理器CardLayout);static JPanel pan1=new JPanel();/创建面板对象 static JPanel pan2=new JPanel();public static void main(String args)frm.setLayout(null);/取消窗口的页面设置 pan2.setLayout(new GridLayout(1,4);/pan2设置为1行4列的网格式布局 CardLayout crd=new CardLayout(5,10);/创建卡片式布局对象crd pan1.setLayout(crd);/面板pan1设置为卡片式布局方式 frm.setSize(350,300);frm.setResizable(false);pan1.setBounds(10,10,320,200);pan2.setBounds(10,220,320,25);frm.add(pan1);/将面板添加到窗口里 frm.add(pan2);,卡片布局设置管理器CardLayout类的应用。,4、卡片式布局管理器CardLayout,JLabel lab1=new JLabel(我是第一页,JLabel.CENTER);JLabel lab2=new JLa