《面向对象程序设计 GUI 编程.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计 GUI 编程.ppt(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、GUI GUI 编程编程第六章第六章第六章第六章1回顾运行时发生的错误称为异常。Java 使用 try 和 catch 块来处理异常。try 块中的语句引发异常,而 catch 块则处理异常。可以同时使用多个 catch 块来分别处理各种异常类型。关键字 throws 用于列出一个方法可能引发的异常类型。Java 中的垃圾收集就是将分配给对象但不再使用的内存回收或释放的过程。2目标了解 Swing 包及其组件掌握如何创建 GUI 程序掌握 Swing 组件的基本用法掌握如何使用布局管理器构造复杂的布局3抽象窗口工具包AWT图形用户界面(GUI)可以通过键盘或鼠标来响应用户的操作。抽象窗口工具包
2、(AWT)是一组Java类,此组Java类允许创建图形用户界面(GUI)。AWT提供用于创建生动而高效的GUI的各种组件。4Swing技术由于AWT的功能有限、其图形组件的绘制也不完全是平台独立等原因,Sun公司联合多家公司推出了与AWT完全兼容的图形用户界面框架Swing。Swing是在AWT的基础上构建的一套新的图形界面开发工具。5javax.swing 包中的类体系结构ComponentContainerJComponentJPanelFrameDialogWindowJFrameJDialogJButtonJTextField6容器可以存放组件的区域,可以存放组件的区域,可在容器上进行
3、可在容器上进行绘制和着色绘制和着色 常用容器包括:常用容器包括:窗体(窗体(J JFrame类)和面类)和面板(板(J JPanel类)。类)。窗体是一个带有边框的独立的窗口。窗体是一个带有边框的独立的窗口。面板是包含在窗口中的一个不带边框的面板是包含在窗口中的一个不带边框的区域。区域。7容器 窗体窗体用来构建窗体用来构建WindowsWindows系统中的窗口应用程系统中的窗口应用程序。序。可以通过以下任一构造函数来创建窗体:可以通过以下任一构造函数来创建窗体:JFrame():创建一个不含标题的标准窗口创建一个不含标题的标准窗口JFrame(String Title):创建一个含有标题的窗
4、口,创建一个含有标题的窗口,这个标题是由参数这个标题是由参数title指定的。指定的。当一个当一个J JFrame窗口被创建以后,需要调用窗口被创建以后,需要调用setSize()方法来设置窗口的大小,并调用方法来设置窗口的大小,并调用setVisible()来显示窗口。来显示窗口。8容器-面板面板不是一个单独的窗口,它只是包含面板不是一个单独的窗口,它只是包含在窗口中的一个区域。在窗口中的一个区域。面板是可以将许多组件组合起来的一种面板是可以将许多组件组合起来的一种容器。容器。最简单的创建面板的方式就是通过面板最简单的创建面板的方式就是通过面板的构造函数的构造函数 JPanelJPanel(
5、)()来进行。来进行。必须将面板添加到窗体中。必须将面板添加到窗体中。9使用容器示例importjavax.swing.*;classPanelTestextendsJPanelpublicstaticvoidmain(Stringargs)PanelTestp=newPanelTest();JFramef=newJFrame(正在测试面板!);f.add(p);f.setSize(300,200);f.setVisible(true);使用使用GUIGUI组件必组件必须须导入导入该包该包将面板添加将面板添加到到框架窗体中框架窗体中10Swing组件组件指可以放置在用户界面上的任何东西组件指可
6、以放置在用户界面上的任何东西,可以将组件设置为可见或重新调整其大小。可以将组件设置为可见或重新调整其大小。Swing支持的组件:标签、文本域、文本区、支持的组件:标签、文本域、文本区、按钮、复选框、选择框等。按钮、复选框、选择框等。高级组件包括滚动条、滚动窗格和对话框。高级组件包括滚动条、滚动窗格和对话框。向窗口加入一个组件:首先生成所需组件的向窗口加入一个组件:首先生成所需组件的实例,然后调用实例,然后调用add()方法,此方法是在方法,此方法是在Container类中定义的。类中定义的。11不同组件标标签签文本域文本域复选框复选框单选按钮单选按钮文本区文本区按钮按钮12标签可以通过以下任一
7、构造函数来创建:可以通过以下任一构造函数来创建:JLabel():新建一个空标签新建一个空标签JLabel(String labeltext):新建一个包含给定文本新建一个包含给定文本的标签的标签JLabel(String labeltext,int alignment):新建一个包新建一个包含给定对齐方式的标签,对齐方式可以为含给定对齐方式的标签,对齐方式可以为 J JLabel.LEFT、JLabel.RIGHT 或或 J JLabel.CENTERv通常用来指明项目的用途通常用来指明项目的用途v标签不可以被用户编辑标签不可以被用户编辑13文本域可以通过以下任一构造函数来创建:可以通过以下
8、任一构造函数来创建:-JTextField():新建一个文本新建一个文本域域 -JTextField(int columns):新建一个包含给定新建一个包含给定列数的文本列数的文本域域 -JTextField(String s):新建一个包含给定字符新建一个包含给定字符串的文本串的文本域域 -JTextField(String s,int columns):新建一个包新建一个包含给定字符串和列数的文本含给定字符串和列数的文本域域 v一种用来输入文本的一种用来输入文本的GUI组件组件v只能接受一行输入只能接受一行输入14标签和文本域使用示例importjava.awt.*;classTextLa
9、belDemoextendsJFrameJLabellblName=newJLabel(“名称:”);JTextFieldtxtName=newJTextField(20);publicTextLabelDemo(Stringtitle)super(title);setLayout(newFlowLayout();add(lblName);add(txtName);publicstaticvoidmain(Stringargs)TextLabelDemot=newTextLabelDemo(正在测试组件!);t.setSize(300,200);t.setVisible(true);新建一个标
10、签新建一个标签新建一个文本新建一个文本域域添加到窗口添加到窗口15文本区可以通过以下构造函数来创建:可以通过以下构造函数来创建:-JTextArea():新建一个新建一个TextArea-JTextArea(int rows,int cols):新建一个包含给新建一个包含给定行数和列数的定行数和列数的TextArea-JTextArea(String text,int rows,int cols):新建一新建一个包含给定字符串、行数和列数的个包含给定字符串、行数和列数的TextAreav要接受输入多行文本时使用要接受输入多行文本时使用v可以包括滚动条可以包括滚动条.JTextArea txtC
11、omment=new JTextArea();add(txtComment);.16按钮可以使用以下任一构造函数来创建按钮:可以使用以下任一构造函数来创建按钮:-JButton():新建一个空的按钮新建一个空的按钮-JButton(String text):新建一个包含给定字符新建一个包含给定字符串的按钮串的按钮v按钮是任何按钮是任何GUI都都不可或缺的组件不可或缺的组件v用来捕捉用户操作的最为简便的用来捕捉用户操作的最为简便的方式方式.JButton btnOk=new JButton(确定确定!);JButton btnCancel=new JButton(取消取消!);add(btnOk
12、);add(btnCancel);.17复选框可以使用以下任一构造函数来创建复选框:可以使用以下任一构造函数来创建复选框:-JCheckbox():创建一个空的复选框,且未被选创建一个空的复选框,且未被选中中 -JCheckbox(String text):创建一个用给定字符串创建一个用给定字符串作为标签的复选框,且未被选中作为标签的复选框,且未被选中 -JCheckbox(String text,Boolean on):创建一个标创建一个标签由参数签由参数text指定的复选框,允许通过参数指定的复选框,允许通过参数on设设定复选框的初始状态。定复选框的初始状态。用于多选项的用户输入,用户用于
13、多选项的用户输入,用户可以通过单击复选框来选定或可以通过单击复选框来选定或取消选定某选项。取消选定某选项。18单选按钮可以通过复选框组生成一系列互斥的复选可以通过复选框组生成一系列互斥的复选框框,实现单选按钮功能。实现单选按钮功能。在一组单选按钮中只能选择一个按钮。在一组单选按钮中只能选择一个按钮。首先创建一个首先创建一个 ButtonGroup 对象。对象。ButtonGroup bg=new ButtonGroup();然后再创建各单选按钮。然后再创建各单选按钮。JRadioButton male=JRadioButton(男男);JRadioButton female=JRadioBut
14、ton(女女”);bg.add(male);bg.add(female);19复选框和单选按钮使用示例importjava.awt.*;importjavax.swing.*;classQualificationextendsFrameJRadioButtont1=newJRadioButton(VisualBasic);JRadioButtont2=newJRadioButton(VisualC+);JRadioButtont3=newJRadioButton(Java);ButtonGroupbg=newButtonGroup();bg.add(t1);bg.add(t2);JCheckb
15、oxr1=newJCheckbox(专科);JCheckboxr2=newJCheckbox(本科);JCheckboxr3=newJCheckbox(硕士);JCheckboxr4=newJCheckbox(博士);JLabellb1=newJLabel(您的学历为:);JLabellb2=newJLabel(您精通的语言为:);新建单选按新建单选按钮钮新建一个单新建一个单选按钮组选按钮组新建复新建复选框选框 public Qualification(String s)super(s);setLayout(new GridLayout(10,1);add(r1);add(r2);add(r3
16、);add(r4);add(t1);add(t2);add(t3);public static void main(String args)Qualification q=new Qualification(学识!学识!);q.setSize(400,250);q.show();将单选按钮添将单选按钮添加到窗体加到窗体将复选框添加到窗体将复选框添加到窗体20选择框用用JComboBox类可以创建一个选择框类可以创建一个选择框 JComboBox combobox=new JComboBox();通过通过 addItem()方法可以添加项目方法可以添加项目combobox.addItem(安东尼
17、奥安东尼奥.班德拉斯班德拉斯);combobox.addItem(莱昂纳多莱昂纳多.迪卡普尼奥迪卡普尼奥);combobox.addItem(桑德桑德.布洛克布洛克);combobox.addItem(休休.葛兰特葛兰特);combobox.addItem(朱莉亚朱莉亚.罗萡茨罗萡茨);用来向用户显示一个选择列用来向用户显示一个选择列表表21布局管理器用户界面上的组件可以按不同方式排列。用户界面上的组件可以按不同方式排列。Java使用布局管理器来管理这些排列方式使用布局管理器来管理这些排列方式。每当需要重新调整屏幕大小或重新绘制屏每当需要重新调整屏幕大小或重新绘制屏幕上任一项目时,就要用到布局
18、管理器。幕上任一项目时,就要用到布局管理器。AWT提供一组用来进行布局管理的类,称提供一组用来进行布局管理的类,称为布局管理器或布局。所有布局都实现为布局管理器或布局。所有布局都实现 LayoutManager接口。接口。22布局类型Java中的中的布局类型包括以下几种:布局类型包括以下几种:-FlowLayout(流式布局)流式布局)-BorderLayout(边界布局)(边界布局)-GridLayout(网格布局)(网格布局)-GridBagLayout(网格包布局)(网格包布局)-CardLayout(卡片布局)(卡片布局)23布局类型的选用每个布局管理器都有自己特定的用途。每个布局管理
19、器都有自己特定的用途。-要按行和列显示几个同样大小的组件,要按行和列显示几个同样大小的组件,GridLayout 会比较合会比较合-要在尽可能大的空间里显示一个组件,就要要在尽可能大的空间里显示一个组件,就要选择选择 BorderLayout 或或 GridBagLayout 24如何设置布局每个容器(每个容器(Container对象)都有一个与对象)都有一个与它相关的缺省的布局管理器。它相关的缺省的布局管理器。-Applet 的缺省布局是的缺省布局是 FlowLayout 在没有设置新的布局前,在容器中添加在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。组件都按照该容器的缺
20、省布局排列。可以通过可以通过setLayout()方法为容器设置新的方法为容器设置新的布局。布局。25FlowLayoutFlowLayout的构造函数有:的构造函数有:-FlowLayout():生成一个默认的流式布局生成一个默认的流式布局-FlowLayout(int alignment):可以设定每一行组可以设定每一行组件的对齐方式件的对齐方式-FlowLayout(int alignment,int horz,int vert):可以可以设定组件间的水平和垂直距离设定组件间的水平和垂直距离vApplet和面板的缺省布局和面板的缺省布局v组件从左上角开始按从左组件从左上角开始按从左到右、
21、从上到下的方式排列到右、从上到下的方式排列FlowLayout mylayout=new FlowLayout();FlowLayout exLayout=new FlowLayout(FlowLayout.RIGHT);setLayout(exlayout);/为容器为容器设置新布局设置新布局 26BorderLayout 2-1下面是下面是BorderLayout所定义的构造函数:所定义的构造函数:-BorderLayout():生成默认的边界布局生成默认的边界布局-BorderLayout(int horz,int vert):可可以以设设定定组组件件间间的水平和垂直距离的水平和垂直距离
22、 v窗口窗口、框架和对话框框架和对话框等的缺省布局等的缺省布局v组件可被置于容器的组件可被置于容器的北、南、东、西或中间北、南、东、西或中间位置位置27BorderLayout 2-2 BorderLayout 类定义了几个常量值以指定相应区域:-BorderLayout.NORTH 对应容器的顶部对应容器的顶部-BorderLayout.EAST 对应容器的右部对应容器的右部-BorderLayout.SOUTH 对应容器的底部对应容器的底部-BorderLayout.WEST 对应容器的左部对应容器的左部-BorderLayout.CENTER 对应容器的中部对应容器的中部加入组件方法:加
23、入组件方法:void add(Component Obj,int region);.setLayout(new BorderLayout();Button btnEast=new Button(东东);Button btnWest=new Button(西西);Button btnNorth=new Button(北北);Button btnSouth=new Button(南南);Button btnCenter=new Button(中中);add(btnEast,BorderLayout.EAST);add(btnWest,BorderLayout.WEST);add(btnNorth,
24、BorderLayout.NORTH);add(btnSouth,BorderLayout.SOUTH);add(btnCenter,BorderLayout.CENTER);.28GridLayoutGridLayout的构造函数如下所示:的构造函数如下所示:-GridLayout():生成一个单列的网格布局生成一个单列的网格布局 -GridLayout(int row,int col):生生成成一一个个设设定定行行数数和和列列数的网格布局数的网格布局 -GridLayout(int row,int col,int horz,int vert):可可以以设设置组件之间的水平和垂直间隔置组件之
25、间的水平和垂直间隔v用于将容器区域划分用于将容器区域划分为一个矩形网格为一个矩形网格v组件按行和列排列组件按行和列排列.Button btn;/声明按钮数组声明按钮数组 String str=1,2,3,4,5,6,7,8,9;setLayout(new GridLayout(3,3);btn=new Buttonstr.length;/创建按钮数组创建按钮数组 for(int i=0;istr.length;i+)btni=new Button(stri);add(btni);29GridBagLayout 通过使用以下语法容器可获得通过使用以下语法容器可获得 GridBagLayout:G
26、ridBagLayout gb=new GridBagLayout();ContainerName.setLayout(gb);要使用此布局,必须提供各组件的大小和布要使用此布局,必须提供各组件的大小和布局等信息。局等信息。GridBagConstraints 类中包含类中包含 GridBagLayout 类用来定位及调整组件大小所需的全部信息。类用来定位及调整组件大小所需的全部信息。v组件大小不必相同组件大小不必相同v组件按行和列排列组件按行和列排列v放置顺序不一定为从左放置顺序不一定为从左至右和由上至下至右和由上至下30GridBagConstraints 类 2-1成员变量列表:成员变量
27、列表:-gridx,gridy:指定组件放置于哪个单元中指定组件放置于哪个单元中-gridwidth,gridheight:指定指定组件将占用多少行组件将占用多少行和多少列和多少列-weightx,weighty:指定在一个指定在一个 GridBagLayout 中应如何分配空间中应如何分配空间,这些变量的缺省值为这些变量的缺省值为 0-ipadx,ipady:指定组件的最小高度和宽度指定组件的最小高度和宽度31成员变量列表:成员变量列表:-fill:指定在单元大于组件的情况下指定在单元大于组件的情况下,组件如组件如何填充此单元何填充此单元,共有共有4可选值。缺省值为:可选值。缺省值为:Gri
28、dBagConstraints.NONE-anchor:指定将组件放置在单元中的位置,指定将组件放置在单元中的位置,共有共有9个可选值。缺省值为:个可选值。缺省值为:GridBagConstraints.CENTER GridBagConstraints 类2-232CardLayout可存储几个不同的布局。可存储几个不同的布局。每个布局就像是一个卡片组中的一张卡片。每个布局就像是一个卡片组中的一张卡片。在一个给定的时间总会有一张卡片在顶层。在一个给定的时间总会有一张卡片在顶层。卡片通常为一个卡片通常为一个 Panel 对象。对象。每当需要许多面板切换,而每个面板需要每当需要许多面板切换,而每
29、个面板需要显示为不同布局时,可以使用卡片布局。显示为不同布局时,可以使用卡片布局。33总结 Swing是一组类,它允许创建图形用户界面,并能够通过键盘和鼠标响应用户的操作。容器指可以存放组件的区域,两种常用容器类:窗体(JFrame类)和面板(JPanel类)。窗体是一个单独的窗口,而面板只是包含在窗口中的一个区域。Swing支持下列类型的组件:标签、文本域、文本区、按钮、复选框、列表框等。34总结布局管理器类提供控制 GUI 组件物理布局的一种方式。以下是几种不同类型的布局:-FlowLayout-BorderLayout-CardLayout-GridLayout-GridBagLayout布局可通过 setLayout()方法进行设置。35总结FlowLayout 是 Applet 和 面板的缺省布局管理器。组件从左上角到右下角进行排列。BorderLayout按北、南、东、西、中的不同区域划分将组件排列于容器中。GridLayout 将组件按行和列排列。所有组件大小相同。GridBagLayout 能将组件放置在最精确的位置。各组件的大小可以不同。CardLayout可存储几个不同的布局管理器 36
限制150内