1、2022年7月28日星期四2l 学习目的:学习目的:了解异常的概念、分类了解异常的概念、分类了解异常的层次了解异常的层次 掌握异常捕获和异常处理掌握异常捕获和异常处理 掌握自定义异常的编写和使用掌握自定义异常的编写和使用l 学习重点:学习重点:异常的捕获与处理异常的捕获与处理自定义异常的编写和使用自定义异常的编写和使用2022年7月28日星期四3异常处理 2022年7月28日星期四4 异常是在运行时代码序列中出现的异常条件,也即异异常是在运行时代码序列中出现的异常条件,也即异常是一个运行时错误。常是一个运行时错误。2022年7月28日星期四5 异常一般可以分为异常(异常一般可以分为异常(Exc
2、eption)和错误(和错误(Error)两个基本类别。两个基本类别。错误类表示严重的错误,例如内部错误和类的错误,错误类表示严重的错误,例如内部错误和类的错误,错误的处理直接由错误的处理直接由Java系统自动处理。系统自动处理。Java编译器要求编译器要求Java程序必须捕获或声明所有的非运行程序必须捕获或声明所有的非运行时异常,但对运行时异常可以不处理。时异常,但对运行时异常可以不处理。2022年7月28日星期四6 异常类是内嵌类异常类是内嵌类ThrowableThrowable的子类。的子类。ThrowableThrowable类派生了类派生了ExceptionException(异常)
3、类和异常)类和ErrorError(错误)类。错误)类。ExceptionException类类又派生出很多的子类,这些子类分为两个分支,一个是又派生出很多的子类,这些子类分为两个分支,一个是RuntimeExceptionRuntimeException类及其子类,另一类是直接从类及其子类,另一类是直接从ExceptionException类派生出的子类类派生出的子类 2022年7月28日星期四7 try try catch(catch(异常类异常类 异常变量名异常变量名)finallyfinally 2022年7月28日星期四8 JavaJava程序中,发生异常时,通常我们可以使用两种方法
4、程序中,发生异常时,通常我们可以使用两种方法来处理。来处理。一是直接由一是直接由JavaJava默认的异常处理机制进行处理。默认的异常处理机制进行处理。二是我们自己编写二是我们自己编写try-catch-finally语句块进行异常处理。语句块进行异常处理。2022年7月28日星期四9 用于处理一个以上的异常,结构如下:用于处理一个以上的异常,结构如下:try try catch(catch(异常类名异常类名 e)e)catch(catch(异常类名异常类名 e)e)2022年7月28日星期四10 finally finally创建一个代码块,该代码块在创建一个代码块,该代码块在try-cat
5、chtry-catch块执块执行之后,行之后,try-catchtry-catch块后面的代码执行之前执行。不管是块后面的代码执行之前执行。不管是否抛出一个异常,否抛出一个异常,finallyfinally块都会执行。块都会执行。try try catch(catch(异常类名异常类名 e)e)finally finally 2022年7月28日星期四11 throwthrow总是出现在函数体中,用来明确地抛出一个异总是出现在函数体中,用来明确地抛出一个异常。程序会在常。程序会在throwthrow语句后立即终止。语句后立即终止。throwthrow的语法如下:的语法如下:throw thro
6、wableInstancethrow throwableInstancethrowableInstancethrowableInstance是是ThrowableThrowable类或其子类的一个实例对类或其子类的一个实例对象。所 以 在 使 用 该 语 句 之 前,必 须 先 得 到 一 个象。所 以 在 使 用 该 语 句 之 前,必 须 先 得 到 一 个throwableInstancethrowableInstance的句柄,通过参数传递到的句柄,通过参数传递到catchcatch子句。子句。2022年7月28日星期四12创建一个throwableInstance,格式为:异常类名
7、异常变量名;throw 异常变量名;或者throw new 异常类名();例如:ArithmeticException e;throw e;或者throw new ArithmeticException();2022年7月28日星期四13 throwsthrows总是出现在函数头中,用来标明该成员函数可能总是出现在函数头中,用来标明该成员函数可能抛出的各种异常。要明确地抛出一个抛出的各种异常。要明确地抛出一个RuntimeExceptionRuntimeException,必必须用须用throwsthrows语句来声明它的类型。语句来声明它的类型。例如:例如:public void setAg
8、e(int a)throws CCOutOfAgepublic void setAge(int a)throws CCOutOfAge该行代码表示当我们调用该行代码表示当我们调用setAgesetAge时,可能产生时,可能产生CCOutOfAgeCCOutOfAge异异常。如果方法定义中包含常。如果方法定义中包含throwsthrows子句,调用该方法的子句,调用该方法的JavaJava语语句就必须包含在句就必须包含在try-catchtry-catch语句块中,否则将发生编译错误。语句块中,否则将发生编译错误。2022年7月28日星期四14 自定义异常类的语法:自定义异常类的语法:class
9、 class 异常名称异常名称 extends Exceptionextends Exception 在自定义异常类中,我们可以编写方法来处理相关在自定义异常类中,我们可以编写方法来处理相关的情况,也可以不写任何代码。的情况,也可以不写任何代码。2022年7月28日星期四15 本章主要介绍了本章主要介绍了JavaJava语言中的异常概念、异常的分类及体系结构、语言中的异常概念、异常的分类及体系结构、异常处理语句异常处理语句trytry、cacthcacth、finallyfinally、throwthrow和和throwsthrows语句的使用,语句的使用,最后介绍了自定义异常类以及在程序中使
10、用自定义异常类的方法和最后介绍了自定义异常类以及在程序中使用自定义异常类的方法和实现代码。通过本章的学习,我们要掌握程序代码中异常捕获的方实现代码。通过本章的学习,我们要掌握程序代码中异常捕获的方法和异常处理的方法,提高应用程序的健壮性,并能够针对不同的法和异常处理的方法,提高应用程序的健壮性,并能够针对不同的异常类别编写不同的处理代码。最后要掌握的是,编写自定义异常异常类别编写不同的处理代码。最后要掌握的是,编写自定义异常类的方法,以及如何在应用程序中抛出自定义异常。类的方法,以及如何在应用程序中抛出自定义异常。2022年7月28日星期四17l 学习目的:学习目的:了解了解AWT与与Swin
11、g编程编程 初步掌握初步掌握Java中的界面规划和设计中的界面规划和设计 掌握掌握Swing常用组件的使用常用组件的使用 掌握掌握Java的事件处理机制与事件模型的事件处理机制与事件模型 了解了解Java中的多媒体操作中的多媒体操作l 学习重点:学习重点:掌握界面规划中的基本概念及各自的作用掌握界面规划中的基本概念及各自的作用掌握事件处理机制和事件模型掌握事件处理机制和事件模型掌握常用组件的使用方法(学会使用掌握常用组件的使用方法(学会使用API文档)文档)2022年7月28日星期四18 2022年7月28日星期四19 Applet Applet类位于包类位于包java.appletjava.
12、applet中,可以完成以下功能:中,可以完成以下功能:1.1.可以用来包含其它界面组件可以用来包含其它界面组件 2.2.可以响应基包含的组件引发的事件可以响应基包含的组件引发的事件 Applet Applet也称小程序,是在客户端运行的也称小程序,是在客户端运行的JavaJava程序。程序。2022年7月28日星期四20 运行运行AppletApplet的客户端必须安装的客户端必须安装JREJRE(JavaJava运行时环境)运行时环境)1.1.可以运行于支持可以运行于支持JavaJava的浏览器的浏览器 2.2.可以使用可以使用appletViewer.exeappletViewer.ex
13、e运行运行2022年7月28日星期四21服务器客户端浏览器1请求网页2下载网页网页3运行网页服务器4请求Applet5下载AppletApplet字节码6运行Applet2022年7月28日星期四22方法原型方法原型功能功能public void init()public void init()第一次被创建,初次运行初始化Applet时调用public void start()public void start()当Applet进入浏览器中,并且允许启动时调用public void paint(Graphics g)public void paint(Graphics g)作为update()
14、的一部分调用,以便对画布进行绘制public void stop()public void stop()每次Applet从浏览器的视线中离开时调用public void destroy()public void destroy()Applet不再需要,将它从页面中卸载时调用2022年7月28日星期四23 容器(容器(ContainerContainer)就是可以包含其它组件的组件。就是可以包含其它组件的组件。常见的容器有:面板(常见的容器有:面板(PanelPanel)和窗体(和窗体(WindowWindow)两大两大类,类,WindowWindow又包含又包含FrameFrame、Dialo
15、gDialog和和JWindowJWindow等。等。图形用户界面(图形用户界面(GUIGUI),),是现在程序设计的规范。是现在程序设计的规范。2022年7月28日星期四24 组件(组件(Component)Component)就是就是GUIGUI界面中的每个元素,任何一界面中的每个元素,任何一个组件都是个组件都是java.awt.Componentjava.awt.Component的子类对象。的子类对象。组件是组件是GUIGUI中最基本的元素。中最基本的元素。2022年7月28日星期四25 用户界面(用户界面(UIUI)的两种常用分类:的两种常用分类:命令行方式和图形用户界面(命令行方式
16、和图形用户界面(GUIGUI)在在JavaJava中,中,GUIGUI可以使用抽象窗口工具集(可以使用抽象窗口工具集(AWTAWT)和和SwingSwing来实现。来实现。2022年7月28日星期四26 颜色类(颜色类(ColorColor)的使用:的使用:public Color(int red,int green,int blue);public Color(int red,int green,int blue);public Color(int r,int g,int b,int alpha);public Color(int r,int g,int b,int alpha);publi
17、c Color(float r,float g,float b);public Color(float r,float g,float b);public Color(int RGB);public Color(int RGB);2022年7月28日星期四27 字体类(字体类(FontFont)的使用:的使用:public Font(String name,int style,int size);public Font(String name,int style,int size);name name是要使用的字体的名称,是要使用的字体的名称,stylestyle是字型,可以使是字型,可以使用
18、用Font.PLAINFont.PLAIN(常规),常规),Font.BOLDFont.BOLD(粗体)或粗体)或Font.ITALICFont.ITALIC(斜体),也可以用斜体),也可以用|对粗体和斜体进行对粗体和斜体进行或运算得到粗斜体。或运算得到粗斜体。2022年7月28日星期四28public void paint(Graphics g)public void paint(Graphics g)Font newFont=null;Font newFont=null;for(int i=0;i fontNames.length&i 10;i+)for(int i=0;i fontNam
19、es.length&i 10;i+)newFont=new Font(fontNamesi,Font.PLAIN,18);/newFont=new Font(fontNamesi,Font.PLAIN,18);/字体对象字体对象g.setFont(newFont);/g.setFont(newFont);/设置当前字体设置当前字体g.setColor(colors i%2);/g.setColor(colors i%2);/设置当前颜色设置当前颜色g.drawString(fontNamesi,10,50+i g.drawString(fontNamesi,10,50+i*21);21);20
20、22年7月28日星期四29ComponentButtonCheckBoxContainerChoiceCanvasLabelTextComponentPanelWindowTextAreaTextFieldAppletFrameDialogjava.awt包中类的体系结构包中类的体系结构2022年7月28日星期四30ContainerPanelWindowJComponentJFrameFrameDialogjavax.swing包中类的体系结构包中类的体系结构JDialogAbstractButtonJPanelJLabelJTextJToggleButtonJButtonJTextFiel
21、dJTextAreaJCheckBoxJRadioButton2022年7月28日星期四31EventObjectActionEventAdjustmentEventComponentEventTextEventItemEventAWT事件类的体系结构事件类的体系结构FocusEventContainerEventInputEventPaintEventWindowEventMouseEventKeyEvent2022年7月28日星期四32 面板(面板(PanelPanel)是一种无边框的容器,通常用来组织是一种无边框的容器,通常用来组织界面中的其它组件(还可以包括其它面板)。界面中的其它组件
22、(还可以包括其它面板)。Panel()Panel()使用缺省的布局管理方式创建一个面板对象使用缺省的布局管理方式创建一个面板对象 Panel(LayoutManager layout)Panel(LayoutManager layout)指定布局管理方式指定布局管理方式 public Component add(Component comp);public Component add(Component comp);面板主要用来规划界面,画布用来自定义绘图。面板主要用来规划界面,画布用来自定义绘图。2022年7月28日星期四33 画布(画布(CanvasCanvas)是一个用来绘图的矩形背景组
23、件,在是一个用来绘图的矩形背景组件,在应用程序中,既可以进行绘制图形,也可以接收各种事件应用程序中,既可以进行绘制图形,也可以接收各种事件(比如响应鼠标和键盘事件等)。(比如响应鼠标和键盘事件等)。Canvas()Canvas()public void paint(Graphics g)public void paint(Graphics g)public void repaint()public void repaint()public void update(Graphics g)public void update(Graphics g)2022年7月28日星期四34 FlowLayou
24、tFlowLayout的布局原则:从左到右,从上到下的布局原则:从左到右,从上到下 FlowLayout()/FlowLayout()/默认对齐方式和间距默认对齐方式和间距 FlowLayout(int alignment)/FlowLayout(int alignment)/默认间距默认间距 FlowLayout(int alignment,int horz,int vert)FlowLayout(int alignment,int horz,int vert)指定对齐方式和间距指定对齐方式和间距 布局管理器用来管理应用程序的界面。布局管理器用来管理应用程序的界面。2022年7月28日星期四
25、35 BorderLayoutBorderLayout将容器划分为东、西、南、北、中。将容器划分为东、西、南、北、中。BorderLayout()/BorderLayout()/默认横纵间距默认横纵间距 BorderLayout(int horz,int vert)/BorderLayout(int horz,int vert)/指定间距指定间距例如,要将一个按钮加到南边:例如,要将一个按钮加到南边:container.add(btnOK,BorderLayout.SOUTH);container.add(btnOK,BorderLayout.SOUTH);2022年7月28日星期四36202
26、2年7月28日星期四37 GridLayoutGridLayout把容器平均划分为行和列的网格,所有的把容器平均划分为行和列的网格,所有的组件被放在网格里,尺寸大小都一样组件被放在网格里,尺寸大小都一样 GridLayout()/GridLayout()/生成一个单列的网格生成一个单列的网格 GridLayout(int row,int col)/GridLayout(int row,int col)/指定行数和列数指定行数和列数 GridLayout(int row,int col,GridLayout(int row,int col,int horz,int vert)int horz,i
27、nt vert)/指定行数,列数,行距和列距指定行数,列数,行距和列距2022年7月28日星期四382022年7月28日星期四39 CardLayoutCardLayout可以存储多个不同的布局,每个布局就像可以存储多个不同的布局,每个布局就像一个卡片组中的一张卡片,在一个时刻只能显示一张卡片一个卡片组中的一张卡片,在一个时刻只能显示一张卡片在顶层。在顶层。CardLayout()/CardLayout()/水平和垂直的间距为水平和垂直的间距为0 0 CardLayout(int hgap,int vgap)/CardLayout(int hgap,int vgap)/指定间距指定间距 voi
28、d show(Container cp,String name)/void show(Container cp,String name)/显示指显示指定容器中的标签卡片定容器中的标签卡片 2022年7月28日星期四40 GridBagLayoutGridBagLayout将组件排列在行和列组成的网格中,将组件排列在行和列组成的网格中,但组件的大小可以不必相同,并且不一定要从左到右,从但组件的大小可以不必相同,并且不一定要从左到右,从上到下排列,而是通过一个辅助类上到下排列,而是通过一个辅助类GridBagConstraintsGridBagConstraints类类来协助完成。来协助完成。Gr
29、idBagLayout()/GridBagLayout()/生成一个布局管理器生成一个布局管理器 GridBagConstraints()/GridBagConstraints()/需要使用约束对象需要使用约束对象 gb.setConstraints(c,gbc);/gb.setConstraints(c,gbc);/设置组件的属性设置组件的属性 cp.add(c);/cp.add(c);/添加组件添加组件c c到容器到容器cpcp中中 2022年7月28日星期四412022年7月28日星期四42 BoxLayoutBoxLayout,既有既有GridBagLayoutGridBagLayou
30、t的优点,又去掉了其的优点,又去掉了其复杂性复杂性,在在java.swingjava.swing包中。包中。BoxLayout(Container target,int axis)/BoxLayout(Container target,int axis)/按指按指定的轴心定的轴心axisaxis生成一个布局管理器对象生成一个布局管理器对象 jpv.setLayout(new BoxLayout(jpv,BoxLayout.Y_AXIS)jpv.setLayout(new BoxLayout(jpv,BoxLayout.Y_AXIS)for(int i=1;i=5;i+)for(int i=1;
31、i=5;i+)jpv.add(new JButton(Vert +i);jpv.add(new JButton(Vert +i);2022年7月28日星期四43 在构建复杂的界面时,建议通过创建多个面板在构建复杂的界面时,建议通过创建多个面板(PanelPanel),),在不同的面板中使用不同的布局管理方式来在不同的面板中使用不同的布局管理方式来处理界面。在复杂界面的布局管理中,面板是一个非常重处理界面。在复杂界面的布局管理中,面板是一个非常重要的容器。要的容器。2022年7月28日星期四44 JLabel()/JLabel()/创建空标签创建空标签 JLabel(String text)/J
32、Label(String text)/创建指定文本的标签创建指定文本的标签 JLabel(Icon image)/JLabel(Icon image)/创建指定图像的标签创建指定图像的标签 public void setText(String text)/public void setText(String text)/设定文本设定文本 public String getText()/public String getText()/返回文本返回文本 一般使用一般使用java.swingjava.swing包来完成包来完成JavaJava程序界面设计。程序界面设计。2022年7月28日星期四45
33、 JButton(String text)JButton(String text)/按钮标题为按钮标题为texttext。JButton(Icon icon)/JButton(Icon icon)/按钮图标为按钮图标为iconicon void setText(String text)void setText(String text)void setIcon(Icon icon)void setIcon(Icon icon)void addActionListener(ActionListener l)void addActionListener(ActionListener l)public
34、 void actionPerformed(ActionEvent e)public void actionPerformed(ActionEvent e)2022年7月28日星期四46 JTextField(String text)JTextField(String text)JTextField(String text,int cols)JTextField(String text,int cols)public void setText(String text)public void setText(String text)public void setEditable(boolean
35、b)public void setEditable(boolean b)public String getText()public String getText()public void addCaretListener(CaretListener l)public void addCaretListener(CaretListener l)void addActionListener(ActionListener l)void addActionListener(ActionListener l)2022年7月28日星期四47 JTextArea(int rows,int cols)JTex
36、tArea(int rows,int cols)JTextArea(String text,int rows,int cols)JTextArea(String text,int rows,int cols)public void setLineWrap(boolean wrap)public void setLineWrap(boolean wrap)public void setTabSize(int size)public void setTabSize(int size)public String getText()public String getText()public void
37、getLineCount()public void getLineCount()public void addCaretListener(CaretListener l)public void addCaretListener(CaretListener l)2022年7月28日星期四48 JPasswordField(int cols)JPasswordField(int cols)JPasswordField(String text,int cols)JPasswordField(String text,int cols)public void setEchoChar(char ch)pu
38、blic void setEchoChar(char ch)public String getPassword()public String getPassword()public boolean echoCharIsSet()public boolean echoCharIsSet()public void addActionListener(ActionListener l)public void addActionListener(ActionListener l)2022年7月28日星期四49 JCheckBox(String text)JCheckBox(String text)JC
39、heckBox(String text,boolean selected)JCheckBox(String text,boolean selected)JCheckBox(String text,Icon icon)JCheckBox(String text,Icon icon)public String getText()public String getText()public Icon getIcon()public Icon getIcon()public setEnabled(boolean b)public setEnabled(boolean b)public void addI
40、temListener(ItemListener l)public void addItemListener(ItemListener l)2022年7月28日星期四50 public JRadioButton(Iconpublic JRadioButton(Iconicon)icon)public JRadioButton(Icon public JRadioButton(Iconicon,booleanicon,booleanselected)selected)public JRadioButton(String public JRadioButton(Stringtext)text)pu
41、blic String getText()public String getText()public Icon getIcon()public Icon getIcon()public setEnabled(boolean b)public setEnabled(boolean b)public void addItemListener(ItemListener l)public void addItemListener(ItemListener l)2022年7月28日星期四51 public JList()public JList()public JList(ListModel dataM
42、odel)public JList(ListModel dataModel)public JList(Object listData)public JList(Object listData)public int getSelectedIndex()public int getSelectedIndex()public Object getSelectedValue()public Object getSelectedValue()public boolean getValueIsAdjusting()public boolean getValueIsAdjusting()public voi
43、d addListSelectionListener(public void addListSelectionListener(ListSelectionListener ListSelectionListenerlistener)listener)2022年7月28日星期四52 public JComboBox()public JComboBox()public JComboBox(ComboBoxModel public JComboBox(ComboBoxModelaModel)aModel)public JList(Object public JList(ObjectlistData)
44、listData)public void addItem(Object public void addItem(ObjectanObject)anObject)public int getItemCount()public int getItemCount()public int getSelectedIndex()public int getSelectedIndex()public void addItemListener(ItemListener public void addItemListener(ItemListenerl)l)2022年7月28日星期四53 public JScr
45、ollBar()public JScrollBar()public JScrollBar(int public JScrollBar(intorientation)orientation)public JScrollBar(int public JScrollBar(intorientation,intorientation,intvalue,value,int intextent,intextent,intmin,intmin,intmax)max)public int getMaximum()public int getMaximum()public int getValue()publi
46、c int getValue()public void addAdjustmentListener(public void addAdjustmentListener(AdjustmentListener AdjustmentListenerl)l)2022年7月28日星期四54 public JProgressBar()public JProgressBar()public JProgressBar(int public JProgressBar(intorient)orient)public JProgressBar(int public JProgressBar(intdir,intdi
47、r,intmin,intmin,intmax)max)public int getMaximum()public int getMaximum()public int getValue()public int getValue()public void setStringPainted(boolean public void setStringPainted(booleanb)b)public void addChangeListener(ChangeListener public void addChangeListener(ChangeListenerl)l)2022年7月28日星期四55
48、 public JTable(TableModelpublic JTable(TableModeldm)dm)public JTable(int public JTable(intnumRows,intnumRows,intnumColumns)numColumns)public JTable(Object public JTable(ObjectrowData,rowData,Object ObjectcolumnNames)columnNames)public void addColumn(TableColumn public void addColumn(TableColumnaColu
49、mn)aColumn)public String getColumnName(int public String getColumnName(intcolumn)column)public int getSelectedColumn()public int getSelectedColumn()2022年7月28日星期四562022年7月28日星期四57 public Frame(Stringpublic Frame(Stringtitle)title)public Frame(Stringpublic Frame(Stringtitle,title,GraphicsConfiguration
50、 GraphicsConfigurationgc)gc)public String getTitle()public String getTitle()public void setResizable(booleanpublic void setResizable(booleanresizable)resizable)public void addWindowListener(WindowListener public void addWindowListener(WindowListenerl)l)应用程序的主容器是窗口;最常见的操作是菜单。应用程序的主容器是窗口;最常见的操作是菜单。202