




已阅读5页,还剩101页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java游戏开发学习情境1:Java游戏体验,08游戏3-2,目标和任务,目标:了解本课程的教学目的和教学内容了解 Java游戏架构, Java运行机制,Java程序的开发流程,各种Java开发平台掌握Java平台的使用方法和技巧 以小组为单位互相合作完成任务任务:在Java平台运行贪吃蛇游戏、电梯模拟游戏,两个真实的Java游戏,本课程学完后要完成的两个Java游戏:(1)贪吃蛇游戏 (2)电梯模拟游戏,学习过程,教师先介绍本课程的基本情况、学习内容和学习要求,然后演示一个已完成的游戏程序,让学生明确学习目标,产生学习兴趣。再介绍Java基本知识和平台使用方法技巧。步骤一:了解课程的基本情况和学习内容步骤二:小组讨论:手机里有什么常见的游戏?(例如:贪吃蛇等)步骤三:观看Java开发的游戏(模拟电梯游戏、贪吃蛇游戏)步骤四:查看游戏的源代码,了解使用的编码语言Java步骤五:学习Java语言的背景和相关基础知识步骤六:学习Java平台的安装和使用方法步骤七:学生自己运行一个简单游戏的源代码(例如:贪吃蛇)。步骤八:学生尝试自己编写一个简单的Java程序,实践指导,1、安装并配置Java开发平台:安装Java 2 SDK开发工具 。设置环境变量: path=javac和java命令所在的目录。 classpath=存放字节码文件的目录。2、查看一个完整的Java游戏源代码,了解Java程序结构和特征: (1)打开Java游戏源程序文件 (2)观察程序结构和特征 (注:Java游戏源程序由教师提供,教师可提供贪吃蛇游戏的源代码给学生观摩),动手实践,3、使用Java集成开发环境调试运行Java程序编辑并保存java程序解释java程序形成中间文件运行Java程序,得到结果,Java相关,一、1995年Java被正式发布二、Java目前的主要应用许多大公司购买了Java的许可证。 众多软件开发商开始支持Java软件产品。面向对象的应用开发。Intranet(企业内部网)上的软件开发。动态画面的设计,包括图形图像的调用。与各类数据库连接查询的SQL语句实现。其他应用类型的程序。,三、Java语言的特点,简单性:它摒弃了C+中许多低级、困难、容易混淆、出错或不经常使用的功能面向对象:程序 = 对象 + 消息。支持封装、多态性和继承。,三、Java语言的特点,可移植性:Java源程序经过编译器编译,会被转换成一种我们称之为“字节码(bytecodes)”的目标程序。“字节码”的最大特点便是可以跨平台运行,即程序设计人员们常说的“编写一次,到处运行”,正是这一特性成为Java得以迅速普及的重要原因。解释性:采用先经过编译器编译、再利用解释器解释的方式运行,三、Java语言的特点,高性能:用Java语言编辑的源程序的执行方法是采用先经过编译器编译、再利用解释器解释的方式来运行的。它综合了解释性语言与编译语言的众多优点,使其执行效率较以往的程序设计语言有了大幅度的提高。,三、Java语言的特点,并发性:Java的多线程机制使应用程序中的线程能够并发执行,且其同步机制保证了对共享数据的正确操作。通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易在网络上实现实时交互行为。丰富的API(Application Program Interface)文档和类库,程序员的开发工作可以在一个更高的层次上展开,这也正是Java受欢迎的重要原因之一。Java同时为用户提供了详尽的API文档说明。,四、Java程序工作机制,Java程序的组成结构,五、Java应用程序(教师提供)Java程序的组成结构(1)至多有一个public类,文件名必须与类名相同。(2)程序可以有一个或多个其它类。(3)当需要从某个类继承或使用某个类及其方法时,使用import引入该类的定义。(4)Java程序组成结构 package/0个或1个,必须放在文件开始 import/0个或多个,必须放在所有类定义之前 public classDefinition/0个或1个,文件名必须与类名相同 classDefinition /0个或多个 interface Definition /0个或多个,六、Java开发平台,(1)JDK + EditPlus(2)JDK + Jcreate(3)JDK + Eclipse,七、Java程序的开发及运行过程,Java游戏开发学习情境2:Java类设计,目标和任务,目标:能根据需求设计和使用Java类 ,能理解MVC设计模式 ,能与小组其他成员协作完成任务,能使用API,教学案例,学习指引辅助学习任务:设计EnterDate.Java类,使用它可以创建、记录、读取特殊的日期,按电梯模拟游戏的设计UML图创建电梯模拟游戏中的类。,学习过程,项目核心:模仿教师提供的一个核心案例,学习类的编写方法功能扩展1:扩展类,为类添加更多的属性、方法、访问控制功能扩展2:使用已有的类应用升级:分析电梯模拟游戏的类图,模仿核心案例编写电梯游戏所需的类,面向对象程序设计概述,面向过程程序设计语言:C程序模块:函数,函数能完成一定的功能,有输入和输出.数据单独存放.面向对象程序设计语言:C+,VB,Java程序模块:类(对象),类的属性保存数据,类的方法完成功能,有输入和输出.,Java类,Java中所有的程序都由一个或多个类组成设计Java程序就是设计Java的类先有类,再创建类的对象,通过对象使用类类由属性和方法构成.Java中的系统类和自定义类学习Java,先学会使用系统类完成一定的功能,再学习自己设计一些类.,程序1-1,EnterDate类定义一个类,又叫声明一个类,它有固定的书写格式类声明的格式.掌握属性的声明和方法的声明,就掌握了类的声明.注意类声明时的一些规范. class extends implements ,* 类体 ,项目核心,供学生模仿,它具有完整的类格式,但只包含少数属性和操作该属性的方法/核心案例,文件名: EnterDate.Java,public class EnterDate public int year;public void setYear(int newYear) if (newYear0) System.out.println(所给的年份参数不合理,设置操作被拒绝!); return; year=newYear; /end setYear(int newYear)方法/提供对属性year进行读取的方法public int getYear() return year; /测试上述属性和方法能否正确使用public static void main(String args)EnterDate hubd;hubd=new EnterDate();hubd.setYear(1980);System.out.println(year=+hubd. getYear());,类的使用,2、类的使用先定义一个类再创建这个类的对象 类名 对象名= new 类的构造方法;通过调用对象的属性和方法来使用这个对象,即使用类来完成一定的事(功能) 对象名.属性; 对象名.方法;示例:使用核心案例EnterDate类。核心案例就是EnterDate类的定义(2) EnterDate hubd = new EnterDate(); (3)hubd.setYear(1980);,EnterDate.Java类的测试,类testEnterDate在另一个新类testEnterDate中使用EnterDate ,如下所示,/public class testEnterDate public static void main(String args) EnterDate hubd,humm; hubd=new EnterDate(); humm=new EnterDate(182,45,69); hubd.setYear(1980); hubd.setMonth(8); hubd.setDay(28); ,测试EnterDate中方法与属性的结果:,构造器,构造器又叫构造方法,构造函数。构造方法是Java类中一种特殊的方法。它体现在:(1)构造方法的方法名必须与类名完全相同。(2)一个类可以定义多个构造方法,这叫构造方法的重载。(3)没有参数的构造方法叫默认构造方法,有参数的叫非默认构造方法。(4)一个类如果一个构造方法都没有定义,则它继承父类的构造方法。(5)当一个类中定义了非默认的构造方法后,默认的构造方法就失效了,除非再定一个默认构造方法的定义。,信息隐藏和封装,属性和方法可以没有修饰符,有 public修饰符、有private修饰符,有protected修饰符。属性和方法修饰符不同,可以控制它们被访问的范围。用private修饰不想被其它类访问的属性和方法,以达到信息隐藏的目的。用public 修饰哪些不想隐藏的属性和方法,以达到可以被子类继承或被别的类访问的目的。,使用继承创建类,Java 用extends实现继承,快速创建类Java支持单继承,一个子类只能有一个父类子类继承父类的属性和方法在Java程序设计中应该多使用继承 class extends implements ,* 类体 ,功能扩展 :使用继承,定义一个person类作为父类,代码如下:class Person private String name;private int age;public Person(String name, int age) =name; this.age= age;public Person(String name) this(name, 20); public Person() name=; age=20; public String getName() return name; public int getAge() return age; public void setName(String name) =name; public void setAge(int age) this.age=age; public String getInfo() return name:+name+nage:+age; / end class Person,功能扩展 :使用继承,Student先继承Person,后重载Person中的方法从上面的Person类继承一个子类Student类,并在子类中重载父类Person中的方法class Student extends Person private String school; /增加新属性 public Student(String name, int age, String school) super(name, age); this.school=school; public Student(String name, String school) super(name); this.school=school; public Student(String school) this.school=school; /重载构造方法 public Student() school=; public String getSchool() return school; /增加新的方法 public void setSchool() this.school=school; /增加新的方法 public String getInfo() return super.getInfo()+nschool:+school; /重载,功能扩展 :使用继承,设计一个类使用Person ,Studentpublic class P49 public static void main(String args) Person person= new Person(张三,21); System.out.println(person.getInfo();Student student= new Student(李四,22,sziit); System.out.println(student.getInfo();Person s = new Student(王五,23,szpt); System.out.println(s.getInfo(); ,方法重载,一个类多个同名的方法叫重载重载不同重写普通方法与构造方法都可以重载普通方法重载规则:重载方法的参数列表必须和被重载的方法不同。重载方法的返回类型可以和被重载的方法不同,但仅此还不够。重载方法可以改变访问控制级别,构造器的重载,构造器也可以重载用this 调用自己的构造方法用super调用父类的构造方法this和super不能同时出现this 和super只能出现在第一行如果你类中没有显式的默认构造器,不能用super()。,方法覆盖,子类可以重写父类中同名的方法重写也称为覆盖重写时注意:方法名必须与被重写的方法一样参数列表必须与被重写的方法一样返回类型必须与被重写的方法一样访问控制级别不能比被重写的方法更严格,由覆盖和重载产生的多态性,面向对象三大特征:封装、继承、多态多态:编译时多态运行时多态多态参数,Static和 final,static用static修饰的成份叫静态成份,如静态属性、静态方法、静态类。static可以修饰属性和方法,内部类,不能用来修饰一般的类。用static 修饰的属性成为全局变量,所有类的实例共用一个静态属性。用static 修饰的方法不能在子类中重写,Static和 final,静态成员没有this。访问静态成员,可不用创建对象,直接用类名访问。在类的方法的外部,可以定义静态块 static 静态块常用于进行静态属性的初始化。静态块的产生,源于任何的操作语句必须属于某个方法这个规定。final可以使用final来修饰类,属性,方法。一个类用final修饰,则它不可以被继承。一个属性用final修饰,则它将成为一个常量。一个方法用final修饰,则它不能被重写。,抽象类,抽象方法就是不完整的方法,方法体为空。类中有抽象方法,则类必须为抽象类用abstract修饰的类叫抽象类如果子类没有实现父类中的抽象方法,则子类必须也为抽象类。一个类不能同时用abstract和final修饰。,接口,当一个类中所有的方法都是抽象方法时,Java将它定义为接口。 interface 和继承父类相似,类可以实现接口。 class extends implements ,* 类体 ,抽象类和接口的多态性,抽象类和接口都支持多态性它们和类的多态性相似。,内部类,就是在一个类的 中间再定义一个类,class A class B 编译后产生A.class 和 A$B.class 两个类文件内部类的使用创建了内部类之后,可以在 的内部或外部使用它注意:内部类的名称不能和它的外部类相同内部类可以申明为abstract,并可以被其它内部类继承。内部类可以申明为final的。内部类可以申明为private 或protected非static的内部类不能申明除常量之外的静态成员。定义在外部类方法体中的内部类称为本地方法内部类,可以访问外部类的其它成员,但不能访问所在方法的局部变量。还有一种特殊的内部类,static 内部类。,Java文件的组织,Java中用包来组织用户的源文件一个Java包可以认为是硬盘上的一个文件夹.Java用package 包名;来创建一个包.同一个包中的类可以互相访问.要访问不同包中的类,用import 包名;导入要访问的某包.,包应用示例,如图所示组织Java的文件将PA1放入package1包中,将PA2放入package2包中,PA2调用PA1,testPA12调用PA1和PA2.,包应用示例,/关于包涉及PA1,PA2,testPA12 三个Java源文件/目录结构d:testpackage1; d:testpackage2/classpath=.;d:test/源程序PA1,PA2,testPA12 等随便放入一个目录如d:testsrc/先进入dos,进入d:testsrc目录/ 用命令行编译PA1.Java,命令格式 Javac -d d:test PA1.Java/用命令行编译PA2.Java, 命令格式 Javac -d d:test PA2.Java/行成一个package1包,包中有一个文件PA1.class,/行成一个package2包,包中有一个文件PA2.class/再进入d:testsrc目录/编译并运行testPA12/testPA12,能正常说明包的运行正确/注意*标明的语句,包应用示例,package package1; /*将PA1放入package1包中public class PA1 package package2; /*,将PA2放入与PA1不同的package2包中import package1.PA1; /*因为PA1,PA2 不同包,PA2想使用PA1必须先导入import package1.PA1; /*import package2.PA2; /*,应用升级:按照设计说明书的类图编写类,问题陈述: 某公司打算建造一幢两层的办公楼,并为它装一部电梯。公司要求开发一个面向对象的模拟程序,对电梯的运作进行建模,在电梯系统的模拟程序里,公司要求图形化地显示执行过程,在适当时刻,屏幕应显示一个人走向电梯,按下一个按钮,然后进入电梯,乘坐电梯,最后走出电梯。该图形还应显示电梯的移动、门的大开、指示灯的开和关、按下和复位按钮式的亮暗变化。,应用升级:电梯游戏系统包含的类,应用升级:实现Elevator类,对于Elevator类的private属性moving、summoned、currentFloor、capacity、和traveTime,他们的声明代码为: public class Elevator /attributes private boolean moving; private boolean summoned; private int currentFloor = 1 ; private int destinationFloor = 2 ; private int capacity = 1 ; private int travelTime = 5 ; /constructor public Elevator() ,Java游戏开发学习情境3:图形用户界面设计,目标和任务,目标:为游戏添加用户界面,用户交互 任务:网上物流系统界面设计 ,电梯模拟游戏界面设计,学习过程,开始,图形用户界面(GUI)设计,学习内容:GUI概述容器有容器布局事件处理概述事件模型事件适配器常用swing组件,项目:设计一个系统界面如下:,项目分析,可将项目分成三个模块实现:,所有的GUI都可分成以上三个模块实现,GUI包,java.awt包,是使用Java进行GUI设计的基础。 javax.swing包,几乎所有AWT组件对应有新功能更强的Swing组件。另外还加入了一些全新的组件。Swing组件在名称上前面多了一个字母“J” 2、GUI的创建步骤(1)引用需要的包和类。(2)设置一个顶层的容器。(3)根据需要为容器设置布局管理器或使用默认布局管理器。(4)将组件添加到容器内,位置自行设计。(5)为响应事件的组件编写事件处理代码。,容器、组件、布局和观感,1 容器和组件组件是可以用图形化的方式显示在屏幕上并能够与用户进行交互的对象。容器是一种特殊的组件,一种能够容纳其他组件或容器的组件。2.布局管理器为了使图形用户界面具有良好的平台无关性,提供了专门用来管理组件在容器中的布局的工具。3.观感 决定swing应用程序的外观。,常用容器,容器是放置其他 Swing 组件的顶级容器JFrame 组件用于在 Swing 程序中创建窗体它的构造函数:JFrame()JFrame(String Title)组件必须添加至内容窗格,而不是直接添加至 JFrame 对象,示例: frame.getContentPane().add(b);,JPanel 组件,用于将小型的轻量级组件组合在一起JPanel 的缺省布局为 FlowLayoutJPanel 具有下列构造函数:JPanel()JPanel(LayoutManager lm)JApplet也是一种窗口容器,继承自Applet类,Applet小程序是另一种Java程序,与Applet不同的是,它默认的布局管理器是JAppletBorderLayout,而Applet默认的布局管理器是FlowLayout。可直接向Applet窗口中添加组件,但JApplet不行,添加组件时必须添加到其内容窗格中。得到内容窗格使用方法: getContentPane();,常用组件,标签(JLabel) 它既可以显示文本也可以显示图像构造函数如下:JLabel(Icon icon):icon表示使用的图标JLabel(String text,Icon icon,int align):text表示使用的字符串; icon表示使用的图标;align表示水平对齐方式,其值可以为:LEFT、RIGHT、CENTER。其它常用方法 getText() setText(String text),常用组件,按钮(JButton) 可以使用以下任一构造函数来创建按钮:JButton() : 新建一个空的按钮JButton(Icon icon)JButton(String text)JButton(String text, Icon icon)JButton btnOk=new JButton(确定!);JButton btnCancel=new JButton(取消!); getContentPane.add(btnOk);getContentPane.add(btnCancel);,常用组件,文本框-JTextFieldJTextField 组件允许输入或编辑单行文本此类的构造函数包括:JTextField()JTextField(Document doc, String text, int columns)JTextField(int columns)JTextField(String text)JTextField(String text, int columns),常用组件,JTextField tf = new JTextField(20); con.add(tf); 文本框-JPasswordFieldJPasswordField 组件允许输入或编辑单行文本,并且文本被其他字符代替。此类的构造函数与单行文本框类似。其它方法:char getPassword()char getEchoChar()void setEchoChar(char c),常用组件,文本框-JTextAreaJTextArea 组件用于接受来自用户的多行文本它可实现可滚动界面JTextArea 组件可使用下列构造函数创建:JTextArea()JTextArea(int rows, int cols),常用组件,复选框-JCheckBox复选框用于为用户提供一组选项JCheckBox 类具有下列构造函数:JCheckBox()JCheckBox(Icon icon)JCheckBox(Icon icon, boolean selected)JCheckBox(String text)JCheckBox(String text, boolean selected)JCheckBox(String text, Icon icon)JCheckBox(String text, Icon icon, boolean selected),常用组件,单选按钮-JRadioButton单选按钮允许用户从多个选项中选择其中一个ButtonGroup 用于在 Swing 中创建组JRadioButton 对象可使用下列构造函数创建:JRadioButton()JRadioButton(Icon icon)JRadioButton(Icon, boolean selected)JRadioButton(String text)JRadioButton(String text, boolean selected)JRadioButton(String text, Icon icon)JRadioButton(String text, Icon icon, boolean selected),常用组件,列表框-JListpublic JList() : 使用空模型构造 JListpublic JList(ListModel dataModel) :构造一个列表,用它显示指定模型中的元素。 public JList (Object listData) :构造一个列表以显示指定数组listData的元素。 JList 不支持滚动。要启用滚动,可使用下列代码: JScrollPane myScrollPane=new JScrollPane();myScrollPane.getViewport().setView(dataList);,常用组件,组合框-JComboBox文本域和下拉列表的组合在 Swing 中,组合框由 JComboBox 表示构造函数如下:public JComboBox() : 此构造函数使用缺省数据模型创建 JComboBoxpublic JComboBox(ComboBoxModel asModel) : 使用现有 ComboBoxModel 中的项目的组合框public JComboBox(Object items) : 包含指定数组元素的组合框,常用组件,菜单菜单显示项目列表,指明各种任务。选择或单击某个选项时会打开另一个列表或子菜单。Swing 菜单由菜单栏、菜单和菜单项构成。菜单栏是所有菜单和菜单项的根JMenuBar 是可通过 JFrame、JWindow 的根窗格添加至容器的组件。由多个 JMenu 组成,每个 JMenu 在 JMenubar 中都表示为字符串。JMenu 在 JMenuBar 下以文本字符串形式显示,而在用户单击它时,则以弹出式菜单显示。JMenuItem为JMenu 中的一个组件,以文本字符串形式显示,可以具有图标,外观可以修改,如字体、颜色、背景、边框等。弹出式菜单JPopupMenu的定义和使用:,常用组件,对话框1JOptionPane对话框 是模式对话框,它提供了很多现成的对话框样式,可以供用户直接使用。 2JFileChooser对话框 提供了标准的文件的打开、保存对话框。,布局管理器,4、布局管理器Java中的布局类型包括以下几种:FlowLayout(流式布局)BorderLayout (边界布局) GridLayout(网格布局)CardLayout (卡片布局) GridBagLayout(网格包布局),FlowLayout布局管理器,FlowLayout的构造函数有:FlowLayout( ):生成一个默认的流式布局FlowLayout(int alignment):可以设定每一行组件的对齐方式 FlowLayout(int alignment,int horz,int vert):可以设定组件间的水平和垂直距离 Applet和面板的缺省布局, 组件从左上角开始按从左到右、从上到下的方式排列,BorderLayout布局管理器,下面是BorderLayout所定义的构造函数:- BorderLayout( ):生成默认的边界布局- BorderLayout(int horz,int vert): 可以设定组件间的水平和垂直距离窗口、框架和对话框等的缺省布局组件被置于容器的北、南、东、西或中间位置,GridLayout布局管理器,GridLayout的构造函数如下所示: - GridLayout():生成一个单列的网格布局 - GridLayout(int row,int col):生成一个设定行数和列数的网格布局 - GridLayout(int row,int col,int horz,int vert):可以设置组件之间的水平和垂直间隔用于将容器区域划分为一个矩形网格组件按行和列排列,见后面计算器的布局例,swing布局管理器,1. BoxLayout布局管理器 按照从上到下(即Y轴)或者从左到右(即X轴)的顺序来依次排列组件。2.ScrollPaneLayout布局管理器是JScrollPane中的内置布局管理器,所以不需要单独创建,会自动设置。,手动布局,在某些情况下,用户不想使用布局管理器,需要自己设置组件的位置和大小,这时应取消容器的布局管理器,然后再进行设置,否则用户自定义设置将会被布局管理器覆盖。取消布局管理器的方法是: setLayout(null); 用户使用setLocation()、setSize()、setBounds()等方法为组件设置位置和大小。需要注意的是,这种方法会导致程序与系统相关,如不同的分辨率会产生不同的效果。,5、事件处理模型,Java 最新的事件处理方法是基于授权事件模型 当事件来源对象因用户的操作(鼠标或键盘),系统会自动触发此事件类对象E,并通知所授权的事件监听者A(若来源对象已向A注册),事件监听者A中有处理各种事件的方法(事件处理者1n)便会处理此事件E的各种状况 。,事件处理方法,实现事件监听器接口法:首先给组件注册监听器,使用下列方法: addxxxListener(事件监听器对象); 确定了事件监听器的类型后,必须在程序中定义类来实现这些接口,重写接口中的所有方法。,事件适配器,使用实现事件监听器接口的方法处理事件时,必须重写监听器接口中的所有方法,尽管有些方法不会用到。继承事件适配器类,只需要重写所需要的方法即可。,项目核心:只包括少数组件,import javax.swing.*;import java.awt.*;class P115 extends JFrame JLabel jLabel;P115() super(网上物流系统); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); jLabel= new JLabel(请选择货物出发地); getContentPane().add(jLabel); pack();public static void main(String args) P115 demo= new P115();,运行结果,功能扩展:包括更多组件的GUI,按照创建组件,界面布局,添加事件处理三个部分完成包括更多组件的GUI。如下图所示:,应用升级,为电梯模拟游戏创建界面,如下图:,Java游戏开发学习情境4:涂鸦游戏设计,目标和任务,目标:游戏场景中图形图像处理任务:涂鸦游戏,用户可选择一种颜色, 用鼠标在屏幕上随意绘画,电梯模拟游戏的场景图片加载,学习过程,项目核心:创建一个Applet容器 ,在其中绘图功能扩展:用户通过交互控制图形绘制,图像加载 应用升级:为“电梯模拟游戏”加载楼层,电梯井等图像,什么是Applet,一个Java Applet就是一个嵌入在另一个程序里面运行的应用程序。就是说Applet是不能单独运行的应用程序。Web的浏览器,appletview可以运行Java的Applet。Applet的内容可以是文本,声音,图像。Java有Application和 Applet两种程序。,Applet 的生命周期,调用init() 方法将Applet加载到容器调用start()方法调用paint()方法调用stop()方法调用destroy()从容器中清除Applet,项目核心,创建一个可以在上面用鼠标涂鸦的Applet程序,运行情况如下:/核心案例,文件名: Scribble.java,创建Applet绘图容器,1 通过继承Applet类创建Applet绘图容器import java.applet.*;public class Scribble extends Applet/定义成员属性/在Applet的子类中覆盖Applet类的init()方法2 init()是java.applet.Applet类中的方法,当applet程序首次被打开时, init()将第一个被自动执行。,添加鼠标动作监听,(1)由于要对Applet容器中发生的鼠标按下和鼠标拖动事件进行绘图响应,可以直接在 init()方法中添加语句: addMouseListener(this); addMouseMotionListener(this);(2)实现MouseListener和MouseMotionListener 2个接口public class Scribble extends Applet implements MouseListener, MouseMotionListener /需要将2个接口中的所有方法都实现,哪怕有些方法不需要做什么,鼠标动作监听接口,键盘动作监听接口,功能扩展1 :增加颜色窗,在上面程序的基础上要求增加一个窗口,它包含颜色选项下拉框和一个清除applet窗体的按钮用来选择画笔颜色和清除applet窗体上的内容。运行情况如下:,添加一个颜色选择窗口,(1)创建一个createSidebar方法来生成含颜色选项下拉框和一个清除applet窗体的按钮的辅助窗口。 private void createSidebar() / 对于颜色数组中的每一个 ColorDescription , / 提取其文本 / 并将它加入选项列表 / 创建 clear window 按钮 / 创建 frame ,添加一个颜色选择窗口,(2)实现ItemListener接口, 对颜色选项下拉框的颜色选取进行事件处理public void itemStateChanged(ItemEvent e) (3)实现ActionListemer接口,对清除applet窗体的按钮进行事件响应public void actionPerformed(ActionEvent e) ,paint()方法,在Java中的awt包里,Component类(构件类)中定义了一个方法: paint(Graphics g) (1)参数g是一个图形类(Graphics)对象,它由系统自动生成,不需要用户程序来实例化。(2)由参数g来调用Graphics类中的图形处理方法(3)paint()方法是自动调用的,当构件首次显示或显示需要更新时调用。(4)如果调用repaint()方法,将导致update()方法的自动调用,update()的调用将首先用背景色清除画面,然后调用paint()方法,Graphics类输出图形,在paint()方法中由g来调用:1直线的输出:public void paint(Graphics g) g.drawLine(50,60,100,120);g.drawLine(30,50,30,50);,矩形的输出,1 无填充的矩形: drawRect(int x, int y, int width, int height) /x,y为矩形左上角坐标,width,height为矩形的宽和高2有填充的矩形 fillRect(int x, int y, int width, int height)3无填充的圆角矩形 drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) /arcWidth,arcHeight为圆角弧的横向和纵向直径4有填充的圆角矩形 fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)draw3DRect(int x, int y, int width, int height, boolean raised) /raised:true/false 5 有凸出/凹下的三D矩形 fill3DRect(int x, int y, int width, int height, boolean raised),画出的六种矩形,椭圆的输出,1 无填充的椭圆drawOval(int x, int y, i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025关于挖掘机租赁合同
- 2025年租赁合同的单方解除
- 2025年法律职业资格考试题库附完整答案详解(名师系列)
- 2025会议室租赁合同下载
- 2025年高中信息技术学业水平考试模拟试卷试题(含答案详解2)
- 2025年高中技术学业水平考试题库模拟及答案解析
- 工程项目施工方案技术标评审模板
- 2025年高等数学教师资格考试试卷及答案
- 2025年贸易补偿借款合同
- 农业项目投融资及风险控制合同
- 记账实操-节能环保企业的全盘账务处理实例
- 居间合同协议书范本txt下载
- 卵巢癌类器官规范化建立及临床转化初步应用专家共识(2025年版)解读
- 2024-2025学年三年级英语下册期末试卷(PEP版)(含答案含听力原文无音频)
- 解剖学基础课程全册教案
- 2024-2025学年江苏省南京市联合体九年级上学期期中化学试题及答案
- 2025年特种设备电站锅炉司炉G2考前必练题库500题(含真题、重点题)
- 秋季驾驶员安全培训
- 三员培训考试试题及答案
- 2025哪吒开学第一课-主题班会 课件
- 热原张媛媛讲解
评论
0/150
提交评论