实验五 Java事件处理
- 格式:doc
- 大小:89.50 KB
- 文档页数:13
实验5 异常处理5.1 实验目的(1)掌握异常处理的编程特点。
(2)了解Java异常分类层次,常见系统异常。
(3)了解自定义异常的定义及方法异常的抛出与处理。
5.2 知识要点Java把异常加入Java语言的体系结构,为异常定义了类和关键字,简化了错误处理代码。
将错误处理从正常的控制流中分离出来,对错误实施统一处理。
5.2.1异常处理结构try {语句块;} catch (异常类名1 参变量名) {语句块;}catch (异常类名2 参变量名) {语句块;}finally {语句块;}说明:(1)finally总是执行,它是异常处理的统一出口,常用来实现资源释放,文件关闭等。
(2)发生异常时try块内的后续语句不再执行;(3)catch按照次序进行匹配检查处理,找到一个匹配者,不再找其它;catch的排列要按照先个别化再一般化的次序。
不能将父类异常排在前、子类异常排在后。
5.2.2 常见系统异常常见系统异常如表5-1所示。
表5-1 常见系统异常5.2.3 自定义异常(1)定义异常类—继承Exception类(2)在方法内抛出异常throw new 异常类();(3)声明方法存在异常在方法头的尾部加上:throws 异常类列表5.3 样例程序样例1:从键盘输入一个十六进制数,将其转化为十进制输出。
如果输入的不是一个有效的十六进制数数字则抛出异常。
提示:可以先编写一个方法将一个十六进制的数字转化为十进制对应的数值,方法在数字非法时产生异常。
【参考程序】class MyException extends Exception {public String toString() {return "非十六进制字符";}}public class Hex2Dec {public static void main(String[] args) {String hex;long dec;hex = args[0];dec = 0;for ( int i = 0; i < hex.length(); i++ ) {try {int digit = hexValue( hex.charAt(i) ); //转化为10进制数字dec = 16*dec + digit;} catch ( myException e) {System.out.println("不是一个十六进制数");return;}}System.out.println ("十进制为: " + dec);}/* 将一个16进制字符转换为10进制字符,如果字符不是16进制范围内字符则抛出异常MyException */static int hexValue(char ch) throws MyException{switch (ch) {case '0': return 0;case '1': return 1;case '2': return 2;case '3': return 3;case '4': return 4;case '5': return 5;case '6': return 6;case '7': return 7;case '8': return 8;case '9': return 9;case 'a':case 'A': return 10;case 'b':case 'B': return 11;case 'c':case 'C': return 5;case 'd':case 'D': return 13;case 'e':case 'E': return 14;case 'f':case 'F':return 15;default:throw new MyException();}}}【编程技巧】(1)定义一个异常类,用来描述“非十六进制数”这一特殊异常。
实验五异常处理一、实验目的1.熟悉异常的抛出与捕获的含义;2.掌握异常捕获与处理的方法;3.能自定义异常。
二、实验内容1. 验证书上例子5,将运行结果保存至实验报告中,并简述Java语言处理异常的过程。
2. 现在多数学校的成绩管理都由计算机进行管理,这就需要有相应的应用程序。
编写成绩管理应用程序,其中有成绩录入模块,成绩录入过程中,难免出现录入数据的类型出现错误,或录入的成绩不在合理的范围。
在成绩录入过程中,若出现上述错误,程序应该如何处理。
程序框架如下,将代码补充完整,并调试出结果,并将运行结果保存至实验报告中:(1)首先定义两个异常类负数异常.java文件源代码:class负分异常extends Exception //当录入了负分时。
此处应用了自定义异常{负分异常(int i){.println("分数为负数");}}高分异常.java文件源代码:class高分异常extends Exception //当录入分超过100时。
应用了自定义异常{高分异常(int i ){.println("分数过高");}}主类源文件代码:import .JOptionPane;public class ExceptionDemo{static final int number=2;int score[]=new int[number];public void检查分数(int分数) throws负分异常,高分异常//下面方法中判断如果录入的成绩不合理,则抛出异常,但本方法并不处理异常,仅声明了异常{i f(分数 >100) throw new高分异常(分数); //通过throw,人工抛出异常i f(分数 <0) throw new负分异常(分数);}public void录入成绩(){int i;for(i=0;i<number;i++){try{score[i]=Int(nputDialog("请输入第"+(i+1)+"个同学的成绩"));}catch(NumberFormatException e) //在try{…….}catch间的语句中若产生异常,则捕获异常,直接进行异常处理{【代码1】}try{检查分数(score[i]);//在检查分数模块中,可能产生高分异常对象,也可能产生低分异常对象,根据不同情况,//进行不同处理}catch(高分异常e){.println(e);}catch(负分异常e){.println(e);}}}public void输出成绩(){.println(score[0]);.println(score[1]);}public static void main(String arg[]){ExceptionDemo demo = new ExceptionDemo();demo.录入成绩();demo.输出成绩();}}3. 理解 finally 子句的作用当一个异常被抛出时,程序的执行流程就不再是连续的了,会跳过某些语句,甚至会由于没有与之匹配的catch 子句而过早地返回,结束程序的运行。
JAVA事件处理机制Java事件处理机制是指在Java程序中处理用户触发的事件的一种机制。
事件处理机制的目的是实现程序与用户交互的功能,当用户触发一些特定的事件时,程序会执行相应的操作。
在Java中,事件处理机制基于观察者模式(Observer Pattern)实现。
观察者模式是一种一对多的关系,其中当一个对象(被观察者)状态发生变化时,它的所有依赖对象(观察者)都会被通知并自动更新。
Java中的事件处理包括两个主要的角色:事件源(Event Source)和事件监听器(Event Listener)。
事件源是指触发事件的对象,而事件监听器是负责处理事件的对象。
事件监听器是一个接口,该接口包含一个或多个用于处理事件的方法。
例如,ActionListener接口用于处理按钮点击事件,它包含一个方法actionPerformed(ActionEvent e),当按钮被点击时该方法会被调用。
在Java中,监听器必须先注册到事件源上才能接收到事件。
通过调用事件源的addXXXListener方法,可以将监听器注册到事件源上。
例如,通过调用按钮对象的addActionListener方法,可以将一个ActionListener监听器注册到按钮上。
当事件源上发生了一个特定类型的事件时,它会通知所有注册在它上面的监听器。
监听器会调用相应的方法来处理事件。
例如,当按钮被点击时,按钮对象会通知所有注册在它上面的ActionListener监听器,调用其actionPerformed方法来处理点击事件。
Java事件处理机制的优点包括:1.灵活性:通过事件处理机制,用户可以轻松地实现自定义的事件处理逻辑,以满足特定需求。
不同的事件可以有不同的监听器来处理,从而增强了程序的灵活性。
2.解耦性:通过将事件源和事件监听器分离,事件处理机制实现了对象之间的解耦。
事件源不需要关心具体的事件处理逻辑,它只需要通知监听器即可。
这样,事件源和事件监听器可以独立变化,增加了程序的可扩展性。
Java事件处理机制(⾃定义事件)实例详解Java事件处理机制java中的事件机制的参与者有3种⾓⾊:1.event object:事件状态对象,⽤于listener的相应的⽅法之中,作为参数,⼀般存在与listerner的⽅法之中2.event source:具体的事件源,⽐如说,你点击⼀个button,那么button就是event source,要想使button对某些事件进⾏响应,你就需要注册特定的listener。
3.event listener:对每个明确的事件的发⽣,都相应地定义⼀个明确的Java⽅法。
这些⽅法都集中定义在事件监听者(EventListener)接⼝中,这个接⼝要继承 java.util.EventListener。
实现了事件监听者接⼝中⼀些或全部⽅法的类就是事件监听者。
伴随着事件的发⽣,相应的状态通常都封装在事件状态对象中,该对象必须继承⾃java.util.EventObject。
事件状态对象作为单参传递给应响应该事件的监听者⽅法中。
发出某种特定事件的事件源的标识是:遵从规定的设计格式为事件监听者定义注册⽅法,并接受对指定事件监听者接⼝实例的引⽤。
具体的对监听的事件类,当它监听到event object产⽣的时候,它就调⽤相应的⽅法,进⾏处理。
先看看jdk提供的event包:public interface EventListener:所有事件侦听器接⼝必须扩展的标记接⼝。
public class EventObject extends Object implements Serializable所有事件状态对象都将从其派⽣的根类。
所有 Event 在构造时都引⽤了对象 "source",在逻辑上认为该对象是最初发⽣有关Event 的对象。
(1)通过DoorEvent.java⽂件创建DoorEvent类,这个类继承EventObject。
实验十七 JAVA 事件处理(本实验须严格考核,限时2周完成)一、实验目的⏹了解JA V A事件处理模式:监听器接口、适配器、继承⏹掌握基本事件处理一般方法,找出事件源、事件、监听器⏹掌握利用监听器接口中的方法处理事件⏹掌握利用适配器类和内部类处理事件的方法二、实验步骤1、理解事件源、事件、监听器的概念:事件源:产生事件的对象。
事件:描述事件源的状态改变的对象监听器:事件发生时被通知的对象//实例10-1import java.awt.*;import java.applet.Applet;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class Example10_1 extends Applet implements ActionListener{Button btn;Label lb;public void init(){btn=new Button("点击我呀!");lb=new Label(" ");btn.addActionListener(this);add(btn);add(lb);}public void actionPerformed(ActionEvent e) {if(e.getActionCommand().equals("点击我呀!")){lb.setText("呵呵,谢谢!");}}}问题1:阅读实例10-1,理解本程序的事件处理过程,从程序中的兰色字体代码中找出事件源、事件、监听器分别是什么。
(30分)事件源:btn事件:被点击监听器:actionPerformed2、利用监听器接口中的方法处理事件实例10-2功能:在文本框中输入“123张小明”,当点击“确认”按钮时,下面的标签中将显示:“您输入了:123张小明”字样。
实验一熟悉Java开发环境(验证性2学时)一、实验目的与要求:1 掌握Java Application程序的开发过程并编写第一个Java Application程序*2 掌握Java Applet程序的开发过程并编写第一个Java Applet程序。
*3 练习简单的HTML文件配合Java Applet使用。
4 熟悉jdk的使用二、实验内容:1 编写一个Java Application程序,在屏幕上显示”This is my first java program!”.*2 编写第一个Java Applet 程序,在屏幕上显示”This is my first Java Applet!”三、实验步骤:1、jdk的使用jdk开发工具包可以从网站下载,jdk不是集成编译环境,须手动运用命令行程序进行编译和解释执行1)编辑.java文件可以在记事本或其他纯文本编辑器中编辑,保存时把文件扩展名定为.java即可,当然要注意文件名命名的要求2)编译生成.class文件进入dos系统进行编译(如图1.1所示),格式如javac MyFirstApplication.java,要注意图1.1进入命令行看javac.exe的路径并且MyFirstApplication.java文件路径和javac.exe路径一样。
编译成功后就能在浏览器中看见多了一个MyFirsApplication.class或更多的.class文件。
如图1.2所示图1.2使用jdk编译MyFirstApplication.java文件3)解释执行Application程序:同样是在dos系统下解释执行,格式如java MyFirstApplication,注意.class后缀别加,如图1.3所示。
图1.3解释执行MyFirstApplication.class程序* applet程序进入dos系统进行编译,格式如javac MyFirstApplet.java,要注意看javac.exe的路径并且MyFirstApplet.java文件路径和javac.exe路径一样。
Java中的GUI事件处理Java中的GUI(图形用户界面)事件处理是指在用户与图形界面进行交互时,程序对用户的操作做出相应的动作或反馈。
本文将探讨Java中GUI事件处理的基本概念、事件的种类以及如何在Java程序中实现事件处理。
事件处理的基本概念在GUI编程中,事件处理是指当用户与界面进行交互时,程序需要对用户的操作做出相应的动作。
例如,当用户点击一个按钮、输入文本或选择一个菜单项时,程序需要相应地更新界面或执行相应的逻辑操作。
Java中的事件处理是基于事件监听器(Event Listener)的模型实现的。
事件监听器是一种特殊的对象,用于监听并处理特定事件的发生。
通过将监听器注册到相应的组件上,程序可以捕获用户的操作并做出相应的处理。
每个事件都有一个相应的监听器接口,需要实现该接口并重写相应的方法来定义事件发生时的操作。
常见的GUI事件1. 鼠标事件- 鼠标点击事件(MouseClicked): 当用户点击鼠标按钮时触发,可以获取鼠标的位置和点击次数等信息。
- 鼠标移动事件(MouseMoved): 当用户移动鼠标时触发,可以获取鼠标的位置信息。
2. 键盘事件- 键按下事件(KeyPressed): 当用户按下键盘上的键时触发,可以获取按下的键的信息。
- 键释放事件(KeyReleased): 当用户释放键盘上的键时触发,可以获取释放的键的信息。
3. 窗口事件- 窗口打开事件(WindowOpened): 当窗口被打开时触发,可以在此事件中进行一些初始化操作。
- 窗口关闭事件(WindowClosed): 当窗口被关闭时触发,可以在此事件中进行资源释放等清理操作。
实现GUI事件处理的步骤1. 创建GUI组件首先,需要创建相应的GUI组件,例如按钮、文本框、窗口等。
可以使用Java提供的Swing或JavaFX库来创建这些组件。
2. 注册事件监听器为每个需要进行事件处理的组件注册相应的事件监听器。
实验五 Java事件处理 实验目的 1. 掌握Java语言中的事件处理方法 2. 掌握Java语言中事件源、监视器和处理事件的接口的概念 实验内容
1. 图形用户界面设计程序(ArtFont.java) 在实验三第1题的基础上,添加事件处理机制,并逐步完善程序功能。分别用ArtFont类的对象做监视器和匿名内部类的对象做监视器实现。 要求实现如下功能: 当在文本框中输入文字后回车,在文本域中显示输入的文字。 当分别选择粗体和斜体复选框时,文本域中的文字分别显示粗体和斜体样式。 当点击颜色按钮时,出现颜色选择对话框,选择需要的颜色,按确定按钮后,按钮的前景色和文本域的前景色设置为选定的颜色。 当选择字体样式下拉框中的某一字体样式时,文本域中的文字设置为指定的字体样式。 当选择字体大小下拉框中的某一字体大小时,文本域中的文字设置为指定的字体大小。 当选择窗体样式下拉框中的某一窗体效果时,窗体外观改变为指定的窗体外观。
图1 程序界面运行效果 精选文库
— 2 package Sy; import java.awt.*; import java.awt.event.*;
import javax.swing.*; public class ArtFont extends JFrame { static ArtFont artFont; JComboBox fontType;//字体样式下拉框 JComboBox fontSize;//字体大小下拉框 JComboBox windowStyle;//窗体样式下拉框
JCheckBox boldBx;// 粗体按钮 JCheckBox italicBx;// 斜体按钮 JButton colorBtn;// 颜色按钮 String[] fontNames;// 字体名称 String[] fontSizes;// 字体大小
JLabel label;// 输入提示标签 JTextField inputText;// 文字输入框 JTextArea txtArea;// 文字显示区 JPanel northPanel;// 字体设置 JPanel centerPanel;// 显示效果区 JPanel southPanel;//样式设置
Font font; int boldStyle, italicStyle; int fontSizeStyle; String fontNameStyle; Color colorStyle = Color.black;// 设置字体的默认颜色为黑色 String[] style = { "默认显示效果", "Windows显示效果", "Unix显示效果" };
public ArtFont() { 精选文库 — 3 super("字体设置"); // 设置默认字体 boldStyle = 0; italicStyle = 0; fontSizeStyle = 10; fontNameStyle = "宋体"; font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle);
northPanel = getNorthPanel(); centerPanel = getCenterPanel(); southPanel = getSouthPanel(); // 设置容器 Container container = getContentPane(); container.setLayout(new BorderLayout()); add(northPanel , BorderLayout.NORTH);//将northPanel添加到窗体的北部 add(centerPanel , BorderLayout.CENTER);//将centerPanel添加到窗体的中部 add(southPanel , BorderLayout.SOUTH);//将southPanel添加到窗体的南部 setSize(500, 300); setLocationRelativeTo(null);//将窗体位于屏幕的中央 setVisible(true); } private JPanel getNorthPanel() { JPanel panel = new JPanel(); label = new JLabel("输入"); inputText = new JTextField(10); boldBx = new JCheckBox("粗体"); italicBx = new JCheckBox("斜体"); colorBtn = new JButton("颜色"); inputText.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) { // 文本输入 txtArea.setText(inputText.getText()); 精选文库 — 4 } }); boldBx.addItemListener(new ItemListener() {
@Override public void itemStateChanged(ItemEvent e) { // 加粗 if(e.getStateChange() == ItemEvent.SELECTED) boldStyle = 1; else boldStyle = 0; font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle); txtArea.setFont(font); } });
italicBx.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { // 斜体 if(e.getStateChange() == ItemEvent.SELECTED) italicStyle = 1; else italicStyle = 0; font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle); txtArea.setFont(font); } }); colorBtn.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) { // 改变颜色 精选文库 — 5 colorStyle = JColorChooser.showDialog(null, "请选择一种颜色", colorStyle); colorBtn.setForeground(colorStyle); txtArea.setForeground(colorStyle);
font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle); txtArea.setFont(font); } }); panel.add(label); panel.add(inputText); panel.add(boldBx); panel.add(italicBx); panel.add(colorBtn); return panel; } private JPanel getCenterPanel() { JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); txtArea = new JTextArea(); panel.add(new JScrollPane(txtArea) , BorderLayout.CENTER);
return panel; } private JPanel getSouthPanel() { JPanel panel = new JPanel(); //获得系统默认字体 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); fontNames = ge.getAvailableFontFamilyNames(); fontType = new JComboBox(fontNames); //设置字体大小 fontSizes = new String[63]; for (int i = 0; i < fontSizes.length; i++) { fontSizes[i] = Integer.toString(i+10); }