Java基础及应用教程(下)ppt.ppt_第1页
Java基础及应用教程(下)ppt.ppt_第2页
Java基础及应用教程(下)ppt.ppt_第3页
Java基础及应用教程(下)ppt.ppt_第4页
Java基础及应用教程(下)ppt.ppt_第5页
已阅读5页,还剩223页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java基础及应用 教程 第1章Java入门第2章Java的数据类型第3章类和对象第4章String类第5章运算符和控制语句第6章容器和布局第7章Applet类第8章Component组件类第9章菜单和对话框第10章绘图方法和鼠标键盘事件第11章线程和多媒体技术第12章文件第13章数据库 第9章 菜单和对话框 菜单框架程序 一个基本的菜单框架程序包含MenuBar Menu MenuItem三个类 MenuBar类的对象称为菜单条 调用Frame类的setMenuBar方法可将菜单条绑定在Frame框架上 Menu类的对象是菜单条上的一个下拉菜单 MenuItem类的对象是下拉菜单中的菜单项 或菜单命令 程序smp91 java说明菜单框架的创建 由于原来程序语句较多 这里作了一些简化 程序smp91 java代码 importjava awt importjava awt event publicclasssmp91extendsFrameimplementsActionListener 1MenuBarmnub Menumnu1 mnu2 mnu3 mnu31 2MenuItemitm1 itm2 itm3 itm4 itm5 itm6 itm71 itm72 TextAreatxt1 txt2 smp91 setVisible true setBackground Color cyan 3setLayout newFlowLayout setBounds 10 10 100 60 txt1 newTextArea 12 30 txt2 newTextArea 12 30 4mnub newMenuBar setMenuBar mnub 5mnu1 newMenu 文件 mnu2 newMenu 编辑 6mnu3 newMenu 插入 mnu31 newMenu 文本框 程序smp91 java代码续一 7itm1 newMenuItem 新文件 itm2 newMenuItem 打开 8itm3 newMenuItem 退出 newMenuShortcut KeyEvent VK E 9itm4 newMenuItem 复制 itm5 newMenuItem 剪切 10itm6 newMenuItem 粘贴 itm71 newMenuItem 横排 itm72 newMenuItem 竖排 12mnub add mnu1 mnub add mnu2 13mnub add mnu3 mnu3 add mnu31 14mnu1 add itm1 mnu1 addSeparator 15mnu1 add itm2 mnu1 addSeparator mnu1 add itm3 程序smp91 java代码续二 16mnu2 add itm4 mnu2 addSeparator 17mnu2 add itm5 mnu2 addSeparator mnu2 add itm6 18mnu31 add itm71 mnu31 addSeparator mnu31 add itm72 add txt1 add txt2 pack itm1 addActionListener this itm2 addActionListener this itm3 addActionListener this itm4 addActionListener this itm5 addActionListener this itm6 addActionListener this 22itm71 addActionListener this itm72 addActionListener this 程序smp91 java代码续三 23publicvoidactionPerformed ActionEvente 24if e getSource itm1 25txt1 setText 您单击了 itm1 getLabel elseif e getSource itm2 txt2 setText 您单击了 itm2 getLabel 26elseif e getSource itm3 System exit 0 publicstaticvoidmain Stringargs smp91smp newsmp91 程序smp91 java运行1 菜单条中有 文件 编辑 和 插入 三个菜单 单击 文件 弹出一个包含 新文件 打开 和 退出 三个菜单项的下拉菜单 单击 打开 命令 便在右边文本区显示 您单击了打开 单击 退出 命令 便终止程序运行 程序smp91 java运行2 单击插入菜单 将鼠标移到弹出的下拉菜单中的 文本框 菜单 便弹出一个包含 横排 和 竖排 两个菜单项的子菜单 文本框 称为级联菜单 程序smp91 java分析 语句1 2声明一个MenuBar类的对象 四个Menu类的对象和八个MenuItem类的对象 语句3设置窗口的位置和大小 语句4创建MenuBar类的对象并通过setMenuBar方法将它绑定在Frame窗口 语句5 6创建四个Menu类的对象 语句7至11创建八个MenuItem类的对象 其中语句8设置Ctrl E为 退出 菜单项的快捷键 语句12 13将mnu1 mnu2 mnu3三个菜单添加到菜单条上 将mnu31菜单添加在mnu3菜单上 语句14至18将八个菜单项分别添加到mnu1 mnu2 mnu3和mnu31四个菜单上 并通过addSeparator方法添加隔离条将各菜单项隔开 语句19至22为八个菜单项添加监听接口 单击菜单项时便调用语句23的actionPerformed方法 经语句24至26判断事件源后执行相应的命令 如果单击 退出 命令 或按下Ctrl E键 语句26的条件菜单成立 终止程序运行 复制 剪切和粘贴操作 程序smp91 java只是一个菜单框架 一个实用的菜单不但需要添加更多菜单和菜单项 还要赋予每个菜单项功能 现在只有itm3菜单项具有退出功能 其他菜单项都还没有功能 下面说明怎样实现复制 剪切和粘贴各菜单项的功能 通常的做法是 先将要复制的文字存入Windows的剪贴板 当需要时再将它们从剪贴板取出 粘贴到其他文件中 这是一个数据的传输过程 为了实现上述功能 先在程序smp91 java开头引入包 importjava awt datatransfer 称为数据传输包 再在程序smp91 java中创建对象 Clipboardclp getToolkit getSystemClipboard Clipboard称为剪贴板类 clp是剪贴板类的对象 复制 还要在程序smp91 java的语句26之后添加以下代码 elseif e getSource itm4 1Stringstr txt1 getSelectedText 2StringSelectiontxt newStringSelection str 3clp setContents txt null 先在文本区txt1中写下要复制的文字 然后选取它们 单击 复制 菜单项后执行上述语句 语句1通过TextArea类的getSelectedText方法获得选取的文字 存入字符串变量str 语句2创建一个StringSelection类的对象txt 该类在smpjava awt datatransfer包中 已在程序开头引入 语句3通过Clipboard类的setContents方法将txt赋予剪贴板clp 这便是复制操作 剪切 在上述复制语句之后添加以下4 5 6三个语句 便可实现 剪切 功能 elseif e getSource itm5 1Stringstr txt1 getSelectedText 2StringSelectiontxt newStringSelection str 3clp setContents txt null 4intstart txt1 getSelectionStart 5intend txt1 getSelectionEnd 6txt1 replaceRange start end 先在文本区txt1中写下要剪切的文字 然后选取它们 单击 剪切 菜单项后执行上述语句 语句1 2 3已在前面说明 语句4 5分别将txt1中的首 末字符的位置存入int型变量start和end 语句6删除txt1中从start到end的字符 这便是剪切操作 粘贴 在上述剪切语句之后再添加以下代码 便可实现 粘贴 功能 elseif e getSource itm6 1Transferablecnt clp getContents this 2DataFlavorflv DataFlavor stringFlavor 3if cnt isDataFlavorSupported flv try 4Stringstr String cnt getTransferData flv 5txt2 append str catch Exceptionee 粘贴需在复制或剪切操作之后进行 所以在执行上述语句之前 先要执行前面介绍的复制或剪切操作语句 粘贴操作代码分析 语句1中的Transferable类和语句2中的DataFlavor类都在smpjava awt datatransfer包中 已在程序开头引入该包 语句1通过Clipboard类的getContents方法将当前剪贴板的内容赋予Transferable类型变量cnt 进行数据传输需要被传递的数据格式和系统要求的数据格式匹配 stringFlavor是DataFlavor类的一个常量 代表JavaUnicodeString类的数据格式 语句2将它存入变量flv 语句3通过isDataFlavorSupported方法判断变量cnt的数据格式和flv的数据格式是否一致 如果一致便执行语句4 5 语句4访问getTransferData方法将变量cnt中的数据按照flv格式返回变量str 并通过 String 强制进行数据类型转换 语句5将str添加在txt2文本区中 便完成了粘贴操作 语句4需要在try catch结构中执行 Dialog对话框类 Dialog类的对象是一个对话框 对话框是一个有标题和边框的窗口 可通过它和客户进行交流 向客户传递和获取客户的信息 对话框必须有一个窗体作为的宿主 例如可用Frame窗口作为对话框的宿主 当宿主窗口最小化时 便自动隐藏对话框 当宿主窗口还原时 又重新展现对话框 对话框的默认布局是BorderLayout 有非模态和模态两种对话框 非模态是默认方式 当打开一个模态对话框后 用户便不能操作它的上层窗口 只有关闭了模态对话框 才能操作上层窗口 非模态对话框则不受限制 程序smp92 java说明了对话框的应用 程序smp92 java代码 importjava awt importjava awt event classfrmextendsFrameimplementsActionListener 1dgdlg Buttonbtn 2frm 3setSize 150 100 setVisible true 4btn newButton 打开对话框 add btn 5dlg newdg this 一个空对话框 true 6btn addActionListener this addWindowListener newWindowAdapter publicvoidwindowClosing WindowEvente System exit 0 7publicvoidactionPerformed ActionEvente 8if e getSource btn dlg setVisible true 程序smp92 java代码续 9classdgextendsDialogimplementsActionListener 10Buttonbt 11dg Framefrm Stringstr booleanbl 12super frm str bl 13setVisible false setLayout newFlowLayout TextAreata newTextArea 对话框 6 20 3 14bt newButton 关闭 add ta add bt pack 15bt addActionListener this 16publicvoidactionPerformed ActionEvente 17if e getSource bt setVisible false publicclasssmp92 publicstaticvoidmain Stringargs frmsmp newfrm 程序smp92 java分析 语句1声明dlg btn两个全局变量 语句2和下面大括号内是frm类的显式构造方法 语句3设置Frame窗口的大小和可见 语句4创建按钮对象btn 语句5通过Dialog的子类dg创建一个对话框对象dlg 语句6为btn添加监听接口 单击该按钮便执行语句7的actionPerformed方法 语句8设置对话框对象dlg可见 便打开对话框 语句9至17定义一个对话框的子类dg 语句11下面是dg类的显式构造方法 对话框子类的创建 语句5的三个参量通过语句11传递给语句12 语句12通过关键字super访问父类Dialog的三个参量的构造方法 Dialog Frameowner Stringtitle booleanmodal 语句5中的frm 一个空对话框 true分别和上式的owner title modal三个参量对应 表示对话框的宿主是Frame窗口 窗口标题栏显示的是 一个空对话框 创建的是模式对话框 语句13设置对话框不可见 表明程序启动时 对话框是隐藏的 语句14 15在对话框中创建一个按钮 并为它添加监听接口 单击该按钮便执行语句16的actionPerformed方法 语句17设置对话框不可见 关闭对话框 程序smp92 java的运行 程序启动后弹出的界面如左图所示 这是有一个按钮的Frame窗口 单击 打开对话框 按钮 便执行语句8 显示对话框 如右图所示 这时可在 请输入 处输入文字 单击对话框的 关闭 按钮 关闭了对话框之后才能关闭Frame窗口 由于Frame类的默认布局是BorderLayout 所以按钮占据了整个窗口 如设置为FlowLayout布局 则按钮显示为本身大小 FileDialog文件对话框类 FileDialog类的对象是一个具有特殊功能的对话框 客户可以通过它选取要 打开 或 保存 的文件 所以称为文件对话框 文件对话框是一个模态对话框 当它打开时只能在对话框中操作 只有将它关闭后才能操作宿主窗口 程序smp93 java代码 importjava awt importjava awt event classsmp93extendsFrameimplementsActionListener 1FileDialogsv op Buttonbt1 bt2 2smp93 3super smp93 setVisible true setSize 150 100 setLayout newFlowLayout 4bt1 newButton 打开 add bt1 5bt2 newButton 保存 add bt2 6sv newFileDialog this 保存 FileDialog SAVE 7op newFileDialog this 打开 FileDialog LOAD 8bt1 addActionListener this 9bt2 addActionListener this 程序smp93 java代码续 addWindowListener newWindowAdapter publicvoidwindowClosing WindowEvente System exit 0 10publicvoidactionPerformed ActionEvente 11if e getSource bt1 op setVisible true 12if e getSource bt2 sv setVisible true 13publicstaticvoidmain Stringargs smp93smp newsmp93 程序smp93 java代码分析 classsmp93类包含分别从语句2 10 13开始的三个方法 语句1 语句4至7声明和创建FileDialog类的sv op对象以及Button类的bt1 bt2对象 语句6 7采用FileDialog类的三个参量的构造方法 其中FileDialog SAVE和FileDialog LOAD是两个常量分别用于创建 打开 和 保存 对话框 语句8 9为按钮bt1 bt2添加监听接口 单击它们便调用语句10的actionPerformed方法 单击bt1执行语句11 显示op对话框 单击bt2执行语句12 显示sv对话框 程序smp93 java的运行 程序启动后便打开一个Frame窗口 其中有两个按钮 如右图所示 单击 打开 按钮便显示 打开 文件对话框 单击 保存 按钮便显示 保存 对话框 如下图所示 打开 文件对话框 在选取文件夹和文件之后 单击 打开 按钮便可打开所选文件 但是本程序尚没有打开文件的功能 将在第12章进一步讨论这个问题 保存 文件对话框 在选取文件夹和文件之后 单击 保存 按钮便可打开所选文件 但是本程序尚没有保存文件的功能 将在第12章进一步讨论这个问题 第10章 绘图方法和鼠标键盘事件 Graphics类 Graphics类和Graphics2D类的方法都有很强的绘图能力 Graphics2D是Graphics的子类 前面各章已涉及一些Graphics类的作图方法 本章进行系统介绍 程序smp101 java应用Graphics类的drawLine drawRect drawRoundRect drawOval drawArc drawPolygon等方法 分别绘制直线 矩形 圆角矩形 椭圆 圆弧 多边形等各种图形的边框 在Applet程序中作图特别方便 所以本章大都采用Applet程序 Graphics类在java awt包中需要在程序开头引入该包 程序smp101 java代码 importjava applet Applet importjava awt publicclasssmp101extendsApplet 1intxp1 50 80 110 80 56 50 2intyp1 130 120 150 180 165 130 3publicvoidpaint Graphicsg 4g setColor Color black 5g drawLine 20 20 250 20 6g drawRect 20 50 66 50 7g drawRoundRect 100 50 50 50 8 8 8g drawOval 160 50 80 50 9g setColor Color red 10g drawPolygon xp1 yp1 6 11g drawArc 120 130 80 60 0 120 程序smp101 java分析 程序启动后自动调用语句3开始的paint方法 参量g是一个Graphics类型的变量 可通过它调用Graphics类的各种方法 本程序采用的方法都用于绘制图形轮廓线 语句4通过变量g调用setColor方法 设置绘图颜色 只要没有改变颜色设置 都用这个颜色画出各图形的轮廓线 语句5调用drawLine方法画直线 前两个参量分别代表直线起点的x y坐标 后面两个参量分别代表直线终点的x y坐标 语句5的两个y坐标相同 所以是一条水平线 如果两个x y坐标都不同 便是斜线 语句6调用drawRect方法画矩形 前两个参量表示矩形左上角坐标 第3 4两个参量分别代表矩形的宽度和高度 语句7调用drawRoundRect方法画圆角矩形 前四个参量同drawRect方法的参量 第5 6个参量表示圆角的形状 分别称为圆角的水平和垂直因子 语句8调用drawOval方法画椭圆 沿椭圆作一个外切矩形 它的四个参量等于外切矩形的四个参量 程序smp101 java的运行 语句9重新设置画笔颜色 语句10调用drawPolygon方法画一个多边形 该多边形由五条直线组成 最后一个参量表示共有6组数据 正好循环画出五条直线 6组数据由语句1 2给出 它们是6个个元素的数组 Xp1表示x坐标 yp1表示y坐标 语句11调用drawArc方法画一个圆弧 这个圆弧是椭圆的一部分 前四个参量同drawOval方法的参量 第5个参量表示圆弧的起始角 最后一个参量表示圆弧的张角 程序smp101a java代码 程序smp101a java说明外切矩形和椭圆 圆弧的关系 importjava applet Applet importjava awt publicclasssmp101aextendsApplet publicvoidpaint Graphicsg g setColor Color black 1g drawRect 20 30 70 60 2g drawRect 110 30 70 60 3g drawRect 200 30 70 60 4g drawOval 20 120 70 60 5g drawArc 110 120 70 60 0 120 6g drawArc 200 120 70 60 0 120 外切矩形和椭圆 圆弧的关系 语句1 2 3画了三个矩形 语句4 5 6画了和矩形相切的椭圆和圆弧 如左图所示 右图表明两个圆弧的起始角都是0 张角都是120度 但是旋转方向不同 语句5是正120度 表示反时针方向旋转 语句6是负120度 表示正时针方向旋转 程序smp102 java代码 程序smp102 java应用Graphics类的fillOval fillRect fillPolygon fillArc方法绘制填充颜色的图形 importjava applet Applet importjava awt publicclasssmp102extendsApplet intxp1 20 50 80 50 26 20 intyp1 130 120 150 180 165 130 publicvoidpaint Graphicsg g setColor Color blue 1g fillRect 20 30 66 50 2g fillOval 100 25 80 60 3g fillPolygon xp1 yp1 6 4g fillArc 90 130 80 60 30 90 程序smp102 java分析和运行 语句1 2 3分别绘制了矩形 椭圆和多边形 语句4调用fillArc方法绘制一个扇形 它的边界由圆弧和两条从圆弧端点到椭圆中心的连线组成 前4个参量绘制一个椭圆 后两个参量表示 从椭圆中心到圆弧两端的两条连线的起始角是30度 正时针方向旋转90度后为终止角 所以它们的夹角是90度 负号表示正时针方向旋转 三基色方法定义颜色 应用setColor Color blue 方法只能设置很少几种颜色 采用三基色方法定义颜色 可达16777216种之多 程序smp103 java说明三基色方法应用 importjava applet Applet importjava awt publicclasssmp103extendsApplet publicvoidpaint Graphicsg 1Colorcol newColor 120 150 250 2g setColor col 3g fillOval 20 20 120 120 4g clearRect 45 55 70 50 程序smp103 java分析 语句1创建一个Color类型的对象col Color类的构造方法为 publicColor intr intg intb 其中r g b是三个整数 数据范围为0 255 分别代表红 绿 蓝三基色的强度 任何颜色都由这三种基色构成 因此共有以下不同颜色 256 256 256 16777216以下是几种特殊颜色 黑 0 0 0 白 255 255 255 红 255 0 0 绿 0 255 0 蓝 0 0 255 黄 255 255 0 紫 255 0 255 青 0 255 255 8位二进制数正好表示0 255个数 所以每种基色用一个八进制数表示 语句2将col设置为当前色 语句3画一个圆 语句4调用clearRect方法将矩形的颜色擦除 成为本底色 程序smp103 java的运行 运行结果如右图所示 也可采用四个参量的构造方法 Color intr intg intb inta 设置颜色 第四个整型参量a的范围也是0 255 表示对象的透明度 0为完全透明 255为完全不透明 对于三个参量的构造方法 a取默认值255 三维立体图 通过Graphics类的draw3Drect方法可绘制三维立体矩形 程序smp104 java说明绘制方法 importjava applet Applet importjava awt publicclasssmp104extendsApplet publicvoidpaint Graphicsg 1Colorcol newColor 255 255 0 255 2g setColor col 3g draw3DRect 20 30 66 50 true 4g fill3DRect 110 30 66 50 true 5g draw3DRect 20 120 66 50 false 6g fill3DRect 110 120 66 50 false 程序smp104 java分析和运行 语句1 2设置三基色 透明度255表示完全不透明 语句3至6分别画四个三维立体矩形 语句3 5只画矩形边框 语句4 6画填充颜色的矩形 第4个参量true和false分别表示凸起和凹进矩形 上面两个是凸起的 下面两个是凹进的 颜色的异或 三基色表示红 绿两种颜色分别为 红 11111111 00000000 00000000 绿 00000000 11111111 00000000 两种颜色的异或是对应位的异或 例如红色和绿色异或后得到黄色 黄 11111111 11111111 00000000 程序smp105 java介绍通过异或绘图的方法 importjava applet Applet importjava awt publicclasssmp105extendsApplet publicvoidpaint Graphicsg 1setBackground Color red 2g setXORMode Color green 3g fillRect 20 20 80 60 用异或方法绘图 语句1的setBackground方法将背景设置为红色 语句2调用setXORMode方法将绿色和背景色 红色 异或 得到黄色 语句3用黄色填充一个矩形 得到一个黄色矩形 结果如右图所示 Graphics2D类 Graphics2D是Graphics的子类 功能更加强大 Graphics2D类方法作图需要创建一个代表所作图形的对象 程序smp106 java说明用Graphics2D类的方法画直线 importjava applet Applet importjava awt 1importjava awt geom publicclasssmp106extendsApplet publicvoidpaint Graphicsg 2Graphics2Dg2d Graphics2D g 3g2d setColor Color black 4Line2Dobj1 newLine2D Double 0 0 200 200 5Line2Dobj2 newLine2D Float 0f 200f 200f 0f 6g2d draw obj1 7g2d draw obj2 程序smp106 java代码分析和运行 Graphics2D类在java awt geom包中 语句1引入该包 语句2将Graphics类型的变量g强制转换为Graphics2D类型变量 语句3用setColor方法设置画笔颜色 语句4 5分别用和Line2D Double Line2D Float类的构造方法创建Line2D类型的直线对象obj1和obj2 它们就是代表所画图形的对象 语句5中的字母f表示浮点数 语句6 7调用draw方法分别将obj1和obj2表示的图形画出 是两条对角线 Graphics2D类画矩形 程序smp107 java说明怎样用Graphics2D类画矩形 语句1创建Rectangle2D矩形类的对象obj1 语句2创建RoundRectangle2D圆角矩形类的对象obj2 语句3画出obj1 这是一个矩形的轮廓线 语句4重新设置画笔颜色 语句5画出obj2 是一个填充了颜色的圆角矩形 程序smp107 java代码 importjava applet Applet importjava awt importjava awt geom publicclasssmp107extendsApplet publicvoidpaint Graphicsg Graphics2Dg2d Graphics2D g g2d setColor Color black 1Rectangle2Dobj1 newRectangle2D Double 20 20 160 130 2RoundRectangle2Dobj2 newRoundRectangle2D Double 50 50 100 80 30 20 3g2d draw obj1 4g2d setColor Color green 5g2d fill obj2 Graphics2D类画圆弧 程序smp108 java说明怎样用Graphics2D类画矩形和圆角矩形 语句1 2 3分别创建Arc2D圆弧类的对象obj1 obj2 obj3 它们的构造方法共有七个参量 前六个用于构筑圆弧 第7个含义为 0表示OPEN 画一个开口的圆弧 1表示CHORD 画一个带弦的弧线 2表示PIE 画一个饼状弧体 程序smp108 java代码 importjava applet Applet importjava awt importjava awt geom publicclasssmp108extendsApplet publicvoidpaint Graphicsg Graphics2Dg2d Graphics2D g g2d setColor Color blue 1Arc2Dobj1 newArc2D Float 20f 40f 160f 120f 0f 100f 0 2Arc2Dobj2 newArc2D Float 40 80 100 100 0 120 1 3Arc2Dobj3 newArc2D Double 0 120 100 100 0 80 2 4g2d draw obj1 5g2d draw obj2 6g2d draw obj3 BasicStroke类作图 BasicStroke类的三个参量的构造方法为 publicBasicStroke floatwidth intcap intjoin 可通过它修饰线段 参量width表示线条的宽度 如果采用一个参量的构造方法则只有这个参量 参量cap译为帽子 可取0 1 2三种值 用于修饰线段的端点 0表示没有帽子 对端点不作修饰 1表示表示有一个半圆形端点 半圆形的高度等于线条的半宽度 好像戴了一顶圆帽子 2表示在线条的端点带了一顶矩形帽子 帽子的高度也等于线条的半宽度 参量join表示两个线段的连接方法 也可取0 1 2三种值 程序smp109 java说明了BasicStroke类的应用 程序smp109 java代码 importjava applet Applet importjava awt importjava awt geom publicclasssmp109extendsApplet publicvoidpaint Graphicsg Graphics2Dg2d Graphics2D g g2d setColor Color blue 1Line2Dobj1 newLine2D Double 20 40 180 40 2Line2Dobj2 newLine2D Double 20 80 180 80 3BasicStrokebs1 newBasicStroke 12f 0 0 4BasicStrokebs2 newBasicStroke 12f 1 0 5g2d setStroke bs1 g2d draw obj1 6g2d setStroke bs2 g2d draw obj2 程序smp109 java分析和运行 语句1 2创建两个直线对象obj1 obj2 语句3 4创建两个BasicStroke类的对象bs1 bs2 bs1的cap参量为0 bs2的cap参量为1 语句5调用Graphics2D类的setStroke方法将bs1赋予Graphics2D SetstheStrokefortheGraphics2Dcontext 并用draw方法绘制直线obj1 语句6将bs2赋予Graphics2D 用draw方法绘制直线obj2 Obj1的cap参量为0 没有帽子 bs2的cap参量为1 有一个半圆帽子 如右图所示 需要注意语句4 5的顺序 draw方法应紧跟在相应的setStroke方法的后面 QuadCurve2D类 QuadCurve2D类用于绘制二次曲线 包含以下两个类 QuadCurve2D Double和QuadCurve2D Float最高项为一次方项的数学表达式是一次曲线 即直线 最高项为二次方项的数学表达式是二次曲线 QuadCurve是QuadraticCurve的缩写 QuadCurve2D Double和QuadCurve2D Float类的构造方法有6个参量 前两个和末两个参量分别表示曲线两个端点的坐标 3 4两个参量表示端点之间两个控制点的坐标 通过控制点的坐标可以控制曲线的形状 控制点不一定是曲线上的一个点 程序smp1010 java说明了QuadCurve2D类的应用 程序smp1010 java代码 importjava applet Applet importjava awt importjava awt geom publicclasssmp1010extendsApplet publicvoidpaint Graphicsg Graphics2Dg2d Graphics2D g 1QuadCurve2Dobj1 newQuadCurve2D Double 30 40 88 50 30 140 2QuadCurve2Dobj2 newQuadCurve2D Float 160 20 50 120 160 160 3g2d draw obj1 4g2d draw obj2 程序smp1010 java分析和运行 语句1创建一个QuadCurve2D类的对象obj1 其中控制点的横坐标88比两个端点的横坐标都大 纵坐标50介于两个端点的纵坐标之间 所以是一个向右弯曲的曲线 如图中左侧曲线 语句2语句1创建一个QuadCurve2D类的对象obj2 其中控制点的横坐标50比两个端点的横坐标都小 纵坐标 120也介于两个端点的纵坐标之间 所以是一个向左弯曲的曲线 如图中右侧曲线 CubicCurve2D类 CubicCurve2D类用于绘制三次曲线 包含CubicCurve2D Float和CubicCurve2D Double两个类 Cubic是立方的或三次的意思 最高项为三次方项的数学表达式是三次曲线 三次曲线有两次弯曲和两个控制点 CubicCurve2D类的构造方法有8个参量 前两个和末两个分别表示曲线两个端点的坐标 第3 4和第5 6分别是两个控制点的坐标 程序smp1011 java代码 importjava applet Applet importjava awt importjava awt geom publicclasssmp1011extendsApplet publicvoidpaint Graphicsg Graphics2Dg2d Graphics2D g 1CubicCurve2Dobj1 newCubicCurve2D Float 30 40 88 10 88 120 30 140 2CubicCurve2Dobj2 newCubicCurve2D Double 140 20 60 60 200 120 80 160 3g2d draw obj1 4g2d draw obj2 程序smp1011 java分析和运行 语句1创建一个CubicCurve2D类的对象obj1 其中两个控制点的横坐标都是88 比端点的横坐标大 第一个控制点的纵坐标比两个端点的纵坐标都小 第二个控制点的纵坐标在两个端点的纵坐标之间 所以曲线向右上方向弯曲 如左图所示 语句2创建一个CubicCurve2D类的对象obj2 其中第一个控制点的横坐标60比第一个端点的横坐标小 第二个控制点的横坐标比第二个端点的横坐标大 两个控制点的纵坐标都在两个端点的之间 所以相应曲线的左 右各有一个弯曲 如右图所示 GradientPaint类 GradientPaint用于绘制具有渐变颜色的图画 GradientPaint类有4种构造方法 下面是其中一种 publicGradientPaint floatx1 floaty1 Colorcolor1 floatx2 floaty2 Colorcolor2 cyclicboolean 参量x1 y1和x2 y2给出两个坐标点 color1是x1 y1处的颜色 color2是x2 y2处的颜色 在这两个坐标之间发生颜色从color1至color2的渐变 如果参量cyclic是true 表示颜色的循环变化 false则表示颜色不循环变化 程序smp1012 java说明GradientPaint类的应用 程序smp1012 java代码 importjava applet Applet importjava awt importjava awt geom publicclasssmp1012extendsApplet publicvoidpaint Graphicsg Graphics2Dg2d Graphics2D g 1Rectangle2Dobj1 newRectangle2D Double 20 20 160 80 2Rectangle2Dobj2 newRectangle2D Double 20 120 160 80 3GradientPaintgrd1 newGradientPaint 20 20 Color black 90 100 Color yellow true 4g2d setPaint grd1 g2d fill obj1 5GradientPaintgrd2 newGradientPaint 20 120 Color white 150 120 Color blue false 6g2d setPaint grd2 g2d fill obj2 程序smp1012 java分析和运行 语句1 2创建两个Rectangle2D类矩形对象obj1和obj2 语句3创建GradientPaint类的对象grd1 语句3调用setPaint方法为Graphics2D设备设置属性gp1 SetsthePaintattributeforGraphics2Dcontext 语句4根据grd1属性画出渐变图形 颜色循环变化 如上图所示 下图是由语句5 6得到的 除了颜色不同外 由于GradientPaint方法的最后一个参量为false 当变为蓝色后颜色不再循环变化 徒手画 用鼠标作画称为徒手画 smp1013 java是一个徒手画程序 语句1设置鼠标形状 参量12表示手形鼠标 语句2为窗口添加MouseMotionListener监听接口 鼠标移动时 便调用语句8的mouseDragged方法 语句9通过MouseEvent类的getX和getY方法测定鼠标的位置 存入变量x和y 然后通过repain方法调用语句3的paint方法 语句4 5已在前面程序中见过 但是这里采用一个参量的BasicStroke类构造方法 表示选取4号粗细的绘图笔 语句6创建一个从x y画到x y的直线对象obj1 语句7将它画出 实际上画了一个绘图笔粗细的点 随着鼠标移动 将各画点连成一幅图画 程序smp1013 java代码 importjava applet Applet importjava awt importjava awt event importjava awt geom publicclasssmp1013extendsAppletimplementsMouseMotionListener intx y publicvoidinit setBackground Color cyan 1setCursor Cursor getPredefinedCursor 12 2addMouseMotionListener this 程序smp1013 java代码 3publicvoidpaint Graphicsg Graphics2Dg2d Graphics2D g g2d setColor Color red 4BasicStrokebs1 newBasicStroke 4 5g2d setStroke bs1 6Line2Dobj1 newLine2D Double x y x y 7g2d draw obj1 8publicvoidmouseDragged MouseEvente 9x int e getX y int e getY repaint 10publicvoidmouseMoved MouseEvente 11publicvoidupdate Graphicsg paint g repaint方法 调用repaint方法时将自动访问父类的默认update方法 该方法执行两项任务 一是清除前一个旧画点 二是访问paint方法画一个新画点 现在我们希望不要执行第一项任务 如果执行了这项任务 擦除了旧画点 只剩下新点无法得到一幅完整图画 所以语句11重写update方法 用它覆盖父类的默认同名方法 重写的repaint方法中只有画新画点的paint方法 没有清除旧画点的语句 由新旧画点便可连成一幅图画 语句10的mouseMoved是一个空方法 没有任何语句

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论