欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    面向对象的程序设计-Java张白一第三版第9章.ppt

    • 资源ID:6034398       资源大小:2.68MB        全文页数:114页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    面向对象的程序设计-Java张白一第三版第9章.ppt

    第9章 文字与图形GUI设计,9.1 GUI设计概述 9.2 绘制文字 9.3 Color类 9.4 绘制形状图形,9.1 GUI设计概述图形用户界面(Graphics User Interface,GUI)为应用程序提供了一个图形化的界面。GUI使用图形的方式,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出命令、启动操作,并将系统运行的结果同样以图形的方式显示给用户,使应用程序具有画面生动、操作简便的效果,省去了字符命令界面中用户必须记忆各种命令的麻烦,深受广大用户的喜爱和欢迎,已经成为目前几乎所有应用软件的既成标准。Java提供的JFC是用于创建图形用户界面的主要组件工具类库。,9.1.1 JFC简介JFC(Java Fundation Classes)是Java基础类库的简称,是Java提供的用于创建图形用户界面的类库。JFC主要包括AWT(Abstract Window Toolkit)组件、Swing组件、Java 2D API、Drag and Drop API以及Accessibility API。(1)AWT 组件:早期的窗口组件包,提供构造窗口的基本需求,例如按钮、文本框、复选框、对话框、菜单等。,(2)Swing 组件:新的窗口组件包,AWT中所有的组件均能在Swing中找到对等体并有很大的改进,此外,Swing还提供了一套丰富的组件和工作框架,例如JTable、JList、JTree等,以提高GUI的开发效率。图9.1是AWT组件与Swing组件间的继承关系。从图9.1可以看出,Swing组件都是AWT的Container类的直接子类和间接子类。例如,JComponent抽象类直接继承Container类,JApplet间接继承Container类。,(3)Java 2D API:扩展了java.awt和类,它为Java应用程序提供了一套二维图形图像处理的类,并提供了丰富的绘图风格,使得独立于平台的图形应用程序的开发更加简便。(4)Drag and Drop API:Drag and Drop API使用户能够在两个应用程序之间实现与平台无关的拖放功能,可以用于Java应用程序和不支持Java技术的应用程序之间交换数据。(5)Accessibility API:提供更先进的沟通界面,例如语音输入、触摸式屏幕等。本书主要讨论前三个API的使用。,图9.1 AWT组件与Swing组件间的继承关系,9.1.2 图形用户界面元素分类Java中构成图形用户界面的各种元素和成分可以粗略地分为三类:容器、控制组件和用户自定义成分。下面给予简略的说明。1容器容器是用来组织或容纳其他界面成分和元素的组件。一个容器可以包含许多组件,同时它本身也可以作为一个组件,放进另一容器中。我们可以用容器简化图形化界面的设计,以整体结构来布置界面。一个应用程序的图形用户界面首先对应于一个复杂的容器,例如一个窗口。这个容器内部将包含许多界面成分和元素,其中某些界面元素本身也可能又是一个容器,这个容器再进一步包含它的界面成分和元素,依此类推就构成一个复杂整体图形界面。,如图9.1所示。抽象类是许多容器类的父类,Component抽象类中封装了容器通用的方法和属性,如图形的容器对象、大小、显示位置、前景色和背景色、边界、可见性等。容器类是Component抽象类的子类,是所有其他容器的父类,它具有组件的所有性质,它的主要功能是容纳其他的控制组件和容器。,2控制组件与容器不同,控制组件是图形用户界面的最小单位之一,它里面不再包含其他的成分。控制组件的作用是完成与用户的一次交互,包括接收用户的一个命令(如菜单命令),接收用户输入的一个文本或选择,向用户显示一段文本或一个图形,等等。从某种程度上来说,控制组件是图形用户界面标准化的结果,目前常用的控制组件有选择类的单选按钮、复选按钮、下拉列表,有文字处理类的文本框、文本区域,有命令类的按钮、菜单等。Swing控制组件的层次结构如图9.2所示。,图9.2 Swing控制组件的层次结构图,使用控制组件,通常需要通过如下几步来实现:(1)创建某控制组件类的对象,指定其大小等属性。(2)使用某种布局策略,将该控制组件对象加入到某个容器中的指定位置。(3)将该组件对象注册给所能产生的事件对应的事件监听程序,重载事件处理方法,实现利用该组件对象与用户交互的功能。,3用户自定义成分除了上述的标准图形界面元素外,编程人员还可以根据用户的需要,使用各种字型、字体和色彩设计一些几何图形、标志图案等,它们被称为用户自定义成分。用户自定义成分通常只能起到装饰、美化的作用,而不能响应用户的动作,也不具有交互功能。Java中的GUI辅助类见图9.3所示。由于用户自定义成分易于学习和掌握,同时,各种基本图形和说明性文字又是容器和控制组件的基本成分,而且考虑到由浅入深的学习规律,因此先在本章利用Swing包学习用户自定义成分,在第10章和第11章再学习控制组件和复杂的容器。,图9.3 GUI辅助类,9.1.3 Swing的组件在javax.Swing包中定义的组件可以分为重量级组件和轻量级组件。1重量级组件与轻量级组件重量级组件(Heavyweight Component)也称顶级(Top Level)组件或顶级容器,有JFrame、JDialog、JWindow和JApplet四个。在任何Swing应用程序中都必须至少有一个重量级组件。重量级组件都与AWT类有关,如图9.1所示,JFrame继承自原有的AWT中的Frame类;JApplet继承自原有的AWT中的Applet类。,轻量级组件(Lightweight Component)是继承自JComponent抽象类的组件,是实现人机交互的基本组件,它们必须被放到重量级组件中才能显示。2Swing容器的结构Swing容器的结构如图9.4和图9.5所示。每一个顶级容器都含有根面板(JRootPane),根面板由一个透明面板(glassPane)和一个分层面板(layeredPane)组成,分层面板又由内容面板(contentPane)和一个可选择的菜单条(JMenuBar)组成。,图9.4 Swing容器的结构,图9.5 JRootPane面板的组成结构,(1)透明面板(glassPane):位于JRootPane 中所有其他组件之上,是完全透明的。其主要功能是捕获鼠标事件和为在所有组件上绘图提供方便。该面板默认情况下是不可见的。(2)分层面板(layeredPane):它是一个容器,提供在若干层上添加组件的能力。分层面板如同一个多层置物架,每一层都可以放置物品,但上面的物品会遮住下面的物品,如图9.6所示。,图9.6 分层面板的分层结构,(3)内容面板(contentPane):是layeredPane内的一层,也称为最底层或FrameContent 层,是顶级容器的内容面板,通常可以将组件加入到其中。加入Swing组件时,可利用getContentPane()方法得到contentPane容器,再利用add()方法将组件添加到容器中。(4)菜单条(JMenuBar):菜单条属于可选项,可有可无,它与分层面板在同一层。,3轻量级组件的分类轻量级组件很多,可将其分为下述几类。(1)中间容器:常用于Swing应用程序中,例如JPanel(一般容器)、JScrollPane(滚动容器)、JSplitPane(分隔容器)、JTabbedPane(标签容器)等,如图9.7所示。(2)专用容器:在UI中起特殊作用的中间层。例如JInternalFrame(内窗体)、JLayeredPane、JRootPane。图9.8是内窗体的情况。,图9.7 4种中间容器,图9.8 JInternalFrame专用容器,(3)基本组件:主要有JButton(按钮)、JCheckBox(复选框)、JRadioButton(多选按钮)、JComboBox(下拉式列表)、JList(列表)、JTextField(文本框)、JTextArea(文本域)、JMenu(菜单)等等,如图9.9所示。其中,JLabel(标签)是向用户显示不可编辑信息的组件;JTextField和JTextArea等是向用户显示可编辑信息的组件。4JRootPane常用的成员方法JRootPane常用的成员方法见表9.1。,图9.9 基本组件,表9.1 JRootPane常用的成员方法,5把组件添加到顶级容器中的方法把Swing组件放入一个Swing顶层容器的内容面板上,避免使用非Swing的重量级组件。可以使用两种方法在JFrame与JApplet等顶级容器中添加组件:(1)利用getContentPane()方法获得当前容器的内容面板对象,再引用容器的add()方法来加入其他组件。例如,frame.getContentPane().add(childComponent)。,(2)先建立一个JPanel之类的中间容器,把组件添加到容器中,然后引用setContentPane()方法把该容器置为顶级容器的内容面板。例如:JPanel contentPane=new JPanel();/建立一个JPanel容器/把其他组件添加到Jpanel中frame.setContentPane(contentPane);/把contentPane的对象放到frame的内容面板里,9.1.4 控制Applet 运行状态的基本方法Applet是一种执行于Web浏览器的小程序,是通过应用程序架构开发而得到的。在编写Web浏览器程序时,必须继承Applet类或JApplet类,必须覆盖必要的Applet 的成员方法,这些成员方法控制了Web页面上Applet对象的生成与执行。我们编写的每个Applet小程序都是Applet类的子类,在实际运行中,浏览器在下载字节码的同时,会自动创建一个用户Applet子类的对象,并在适当事件发生时自动调用该对象的几个主要方法。为此,下面先说明Applet应用程序的执行过程及其所引用的方法。,(1)init()方法:当创建Java Applet且第一次使用支持Java的浏览器载入时,就会执行init()方法。该方法只执行一次,因此,可以利用init()方法进行一些只需执行一次的初始化操作。例如,通过init()方法初始化图像文件、声音文件、字体或者将其他一些对象添加到用户界面等。(2)start()方法:Applet运行init()方法之后将自动调用start()方法,而且,每当用户离开包含该Applet的主页后又再次返回时,或者当浏览器从图标状态恢复为窗口时,系统又会再执行一遍start()方法。start()方法是Applet的主体,体现了小应用程序要完成的功能。可以在start()方法中启动相关的线程来执行任务。例如,继续一个动画,循环播放歌曲等。,(3)paint()方法:paint()方法是Container类的方法。它的主要作用是在Applet的界面中显示文字、图形和其他界面元素。浏览器调用paint()方法的事件主要有以下三种:当浏览器首次显示Applet时,会自动调用paint()方法。当用户调整窗口大小或移动窗口时,浏览器会调用paint()方法。当repaint()方法被调用时,系统将首先调用update()方法将Applet对象所占用的屏幕空间清空,然后调用paint()方法重画。,(4)stop()方法:当用户将浏览Applet程序所在的Web页面切换到其他页面时,浏览器会自动调用stop()方法,让Applet程序终止运行。如果用户又回到Applet程序所在的Web页面,则浏览器重新启动Applet程序的start()方法。(5)destroy()方法:当浏览器正常关闭时,自动执行此方法,结束程序,释放所占资源。,9.1.5 JApplet类如图9.1所示,JApplet是Swing包中的类,是Applet的子类,它增加了对JFC/Swing组件架构的支持。Swing扩展了AWT组件集,定义了相对于java.awt包具有更多、更强功能的Swing GUI组件集。因此,本书介绍javax.swing的“J组件”,示例中的Java Applet小程序则为JApplet小程序。如图9.4、9.5所示,JApplet包含内容面板容器,小应用程序必须把所有的组件添加到内容面板中,Java提供面板管理器类管理放入内容面板里的组件。在JApplet中,内容面板的默认面板管理器类是BorderLayout,约束条件是BorderLayout.CENTER。这部分内容详见第11章。,9.1.6 Java 2D API1Java 2D API的组成Java 2D API(Java 2D Application Programming Interface)是一个用于提供高性能图形操作的Java类的集合,由下面的主要包组成。java.awt:包含用于创建用户界面和绘制图形图像的所有类。:提供创建和修改图像的各种类。:提供用于颜色空间的类。:提供与字体相关的类和接口。,:提供用于在与二维几何形状相关的对象上定义和执行操作的Java 2D类。:为通用的打印API 提供类和接口。:提供用于生成与呈现无关的图像的类和接口。Swing是在2D包上构造的,所以Swing 组件内利用Java 2D API很容易。,2Java 2D API坐标系应用Java 2D API绘制文本与图形时有两种坐标系,一种是与设备无关的逻辑坐标系,也称为用户坐标系;另一种是与设备(如显示器、打印机等)有关的坐标系。Java 2D API具有自动转换两种坐标系的功能。在默认情况下,用户坐标系的原点在绘图表面的左上角,左上角坐标为(0,0),x坐标从左向右递增,y坐标从上向下递增。当文本与图形在屏幕上输出时,坐标单位以像素来度量。我们给出的所有文本与图形都是相对于用户坐标系的。图9.10中的点p表示其在用户坐标系中的位置。,图9.10 Java用户坐标系,9.1.7 Graphics2D对象1Graphics2D的三种图形对象Graphics2D对象可以输出三种图形对象:(1)shape(形状)图形对象。它是一些几何图形类型,如矩形、椭圆、直线和曲线,每种形状都实现接口。(2)text(文本)图形对象。它可以按不同的字体、风格和颜色输出。(3)image(图像)图形对象。它是类的对象。image的内容非常多,本章主要讲述shape和text两类图形对象的绘制,偶尔也会涉及其他一些image的知识。,2Graphics2D对象的属性设置Graphics2D对象通过其属性封装绘图用的状态信息。因此,在绘制二维几何图形前,需要对图形对象的属性进行设置。Graphics2D对象提供了下面六个属性的设置和获得方法。(1)Paint属性:用于设置要绘制的图形或文字的颜色,通过setPaint()和getPaint()方法来实现。例如,假设g2是引用Graphics2D对象的引用变量,就可以用g2.setPaint(Color.green)语句设置该对象的Paint属性为绿色。,(2)Stroke属性:通过setStroke()方法来控制图形轮廓线的形状。例如,用g2.setStroke(new BasicStroke(4)语句,设置Graphics2D对象的图形轮廓线的宽度为4个像素。(3)Font属性:用于设置输出文本的字体。(4)Transform属性:通过setTransform()方法来实现图形的缩放、旋转和移位等。(5)Composite rule属性:通过setComposite()方法来描述绘图操作如何与存在的背景相复合。(6)Clipping space属性:通过setClip()方法来设置剪切区域(clip area),即它将绘图限制在一个设定的区域内,使绘图操作在这个区域外无效。,9.2 绘 制 文 字在Java 2D API中,各种文字都是以图形的方式输出的。以图形的方式绘制文字需要使用Graphics类和Graphics2D类提供的绘制文字的成员方法。绘制文字时,可以通过创建一个字体类(Font类)的对象来指定文字的字体名、字体样式及字体大小。Java 2D API通过调用计算机系统提供的字体来实现绘制文字的功能。,9.2.1 绘制文字的成员方法由于字符串可以用字符串对象、字符数组、字节数组这三种不同的形式表示,故Java在Graphics类中相应地提供了三个成员方法来绘制这三种不同形式的字符串(见表9.2)。Java在Graphics2D类中提供的绘制字符的常用成员方法如表9.3所示。,表9.2 绘制字符和字符串的成员方法,表9.3 绘制字符的常用成员方法,【示例程序C9_1.java】使用Graphics类的三个成员方法绘制“WELCOME TO XIAN”。import;import;public class C9_1 extends JApplet private String s=“WELCOME!”;private char c=T,O,a,e,t;private byte b=d,4,X,I,047,A,N;public void paint(Graphics g)/覆盖Applet的成员方法,g.drawString(s,50,25);g.drawChars(c,0,2,50,50);g.drawBytes(b,2,5,50,75);在这个程序中,为了学习使用绘制字符和字符串的三个成员方法,我们分别创建了一个字符串对象、一个字符数组对象和一个字节数组对象。最后,通过覆盖类的paint()方法来实现文字的绘制。该程序的运行结果见图9.11。,图9.11 程序C9_1的运行结果,【示例程序C9_2.java】使用Graphics2D类的成员方法绘制“WELCOME TO XIAN”。import;import java.awt.Graphics2D;import;public class C9_2 extends JApplet private String s=“WELCOME!”;private char c=T,O,a,e,t;private byte b=d,4,X,I,047,A,N;public void paint(Graphics g)/为保证方法可以访问绘图环境的全部功能,把g指向的对象强制转换成Graphics2D对象,Graphics2D g2=(Graphics2D)g;g2.drawString(s,50,25);g2.drawChars(c,0,2,50,50);/Graphics2D是Graphics的子类,可以继承Graphics类的方法 g2.drawBytes(b,2,5,50,75);该程序的运行结果与示例程序C9_1.java的运行结果完全一致(见图9.11)。之所以给出这个示例程序,主要是为了让读者对Graphics2D类的绘图方法有一个初步的认识。,9.2.2 Font类Font类提供了一个构造方法Font,一个设置字体的成员方法setFont,以及若干个获取字体有关信息的成员方法,下面分别讨论。1.Font类的构造方法Font类用来描述字体的名称(Name)、大小(Size)和样式(Style)。使用Font类的构造方法创建一个Font类的对象,其格式如下:Font(String fontname,int style,int size)其中:fontname为字型名,如宋体、黑体、楷体、Arial、Courier、TimesRoman、Helvetica等;style为字体样式,如粗体(BOLD)、斜体(ITALIC)、正常体(PLAIN);size为用像素点表示的字体大小。,2.Font类的成员方法创建一个Font类对象后,就可以使用Font类提供的成员方法来获取字体、字型等方面的信息了。Font类提供的常用成员方法如表9.4所示。3.设置字体可以用类的成员方法来设置自己希望使用的字体,其格式如下:setFont(Font myFont);,4.自定义字体绘制文字的步骤自定义字体绘制文字的步骤如下:(1)创建Font类对象,指定字体名、字体样式及字体大小;(2)使用.setFont()设置创建好的Font类对象;(3)调用drawString()方法绘制文字。【示例程序C9_3.java】使用不同的字体绘制文字。import;import;import java.awt.Graphics2D;import;,public class C9_3 extends JApplet Font f1=new Font(TimesRoman,Font.BOLD,16);/字体为TimesRoman,字体样式加粗 Font f2=new Font(Courir,Font.ITALIC,24);/字体为Courir,字体样式倾斜 Font f3=new Font(Helvetica,Font.PLAIN,14);/常规 String hStr=Courir;public void paint(Graphics g)Graphics2D g2=(Graphics2D)g;g2.setFont(f1);g2.drawString(TimesRoman,20,50);,g2.setFont(f2);g2.drawString(hStr,20,100);g2.setFont(f3);g2.drawString(“Helvetica”,20,150);该程序的运行结果如图9.12所示。,图9.12 程序C9_3的运行结果,【示例程序C9_4.java】获取字体信息。import;import;import java.awt.Graphics2D;import;public class C9_4 extends JApplet Font f=new Font(“Courier”,Font.ITALIC+Font.BOLD,24);/字体样式倾斜加粗 public void paint(Graphics g)Graphics2D g2=(Graphics2D)g;int style,size;String s,name;,g2.setFont(f);style=f.getStyle();/得到字体样式 if(style=Font.PLAIN)s=“Plain”;else if(style=Font.BOLD)s=“Bold”;else if(style=Font.ITALIC)s=“Italic”;else s=“Bold italic”;size=f.getSize();/得到字体大小 s+=size+“point”;name=f.getName();/得到字体名称 s+=name;g2.drawString(s,10,50);该程序的运行结果如图9.13所示。,图9.13 程序C9_4的运行结果,9.3 Color类五彩缤纷的色彩可以增强文字或图形的显示效果。Color类定义了许多个有关颜色的常量和成员方法供编程者使用。9.3.1 Color类的构造方法创建Color类对象需要使用Color类的构造方法,这些构造方法如表9.5所示。,表9.5 类的构造方法,不论使用哪种构造方法来创建Color对象,都需要指定新建颜色中的R(红)、G(绿)、B(蓝)三色的比例。Java提供的这三种构造方法用不同的方式确定RGB的比例,可以使编程者从256256256(约16000000)种颜色中进行选择。一个RGB值由三部分组成:第一个RGB部分定义红色的量;第二个RGB部分定义绿色的量;第三个RGB部分定义蓝色的量。RGB值中某一部分的值越大,这种特定颜色的量就越大。,9.3.2 Color类的数据成员常量用户除了可以使用构造方法指定Color的RGB值外,还可以使用Java提供的一些常用颜色的Color类的数据成员常量,如表9.6所示。,表9.6 Color类的static数据成员常量和RGB值,9.3.3 Color类的成员方法创建Color类对象后,就可以使用Color类的成员方法了。Color类提供的常用成员方法如表9.7所示。此外,还可以用和 Graphics2D类的方法设定颜色或获取颜色。这些方法及其功能如下。(1)setBackground(Color c):设置Graphics2D 上下文的背景色,c代表颜色。(2)setPaint(new Color(int r,int g,int b):设定图形上下文的当前颜色。(3)setColor(new Color(int r,int g,int b):设定图形上下文的当前颜色的另一种方法。,表9.7 类的成员方法,9.3.4 应用举例【示例程序C9_5.java】设置字符颜色。import;import;import java.awt.Graphics2D;import;public class C9_5 extends JApplet public void paint(Graphics g)Graphics2D g2=(Graphics2D)g;int red,green,blue;,red=255;blue=255;green=0;g2.setPaint(new Color(red,green,blue);/设置前景颜色 getContentPane().setBackground(Color.cyan);/设置背景颜色 g2.drawString(“Welcome to Xi047an”,25,75);showStatus(“Current RGB:”+g2.getPaint().toString();/状态行显示绘图文字颜色信息 该程序的运行结果如图9.14所示。,图9.14 程序C9_5的运行结果,注意:Swing组件与AWT组件不同,不能直接添加到顶层容器中,它必须添加到一个与Swing顶层容器相关联的内容面板(contentPane)上。内容面板是顶层容器包含的一个普通容器,它是一个轻量级组件。的getContentPane()方法返回此Applet的contentPane对象,然后,利用该对象的setBackground()方法设置背景颜色。,9.4 绘制形状图形Java 2D API中提供了许多形状类,如直线、曲线、矩形、椭圆、面积等。为了配合Graphics及Graphics2D类的绘图功能,在java.awt包中还定义了一些辅助实现图形绘制功能的类,例如,设置线条的宽度、颜色,使用任意纹理填充几何形状等。在面积类中还提供了合并、交叉、异或和用方法组合图形等。,9.4.1 绘制几何图形的方法与步骤包中定义了许多实现几何图形的类,这些类可以创建几何图形对象,然后通过Graphics2D类的对象显示这些几何图形。有两种绘制几何图形的方法:一种是使用draw()方法绘制图形轮廓;另一种是使用fill()方法绘制内部填充的几何图形。轮廓几何图形的绘制步骤如下:(1)创建一个Graphics2D类的对象;(2)创建一个几何形状类geom的对象shape;(3)按要求设置Graphics2D的属性;,(4)调用Graphics2D类对象的draw(shape)方法绘制几何图形。绘制内部填充的几何图形也可分为4步,其中前3步与轮廓几何图形的绘制步骤相同,只是在第(4)步中调用的是Graphics2D类的对象的fill(shape)方法。9.4.2 绘制线段与矩形线段与矩形是最常用的几何图形之一,Java 2D API中提供了绘制直线、二次曲线、三次曲线、平面矩形、圆角矩形等图形的构造方法,如表9.8所示。在这些方法中,绘制圆角矩形除了要指定矩形区域外,还需要指明圆角的弧宽(arcw)和弧高(arch)。,表9.8 绘制线段与矩形用到的构造方法,下面我们通过一些示例程序来说明绘制这些图形的方法。【示例程序C9_6.java】在窗体上绘制直线、二次曲线及三次曲线。import java.awt.*;import.*;import javax.swing.*;class drawPanel extends JPanel public void paintComponent(Graphics g)Graphics2D g2=(Graphics2D)g;Line2D.Double Line1=new Line2D.Double(20.0,20.0,80.0,40.0);QuadCurve2D.Double Line2=new QuadCurve2D.Double(130.0,30.0,150.0,50.0,170.0,20.0);,CubicCurve2D.Double Line3=new CubicCurve2D.Double(220.0,40.0,240.0,60.0,260.0,20.0,300.0,35.0);getRootPane().setBackground(Color.cyan);/设置背景颜色 g2.setPaint(Color.red);/设置前景颜色 g2.draw(Line1);g2.draw(Line2);g2.draw(Line3);public class C9_6 public C9_6(),JFrame.setDefaultLookAndFeelDecorated(true);/设置窗体图标显示为默认方式 JFrame f=new JFrame(draw Line);/创建窗体对象 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/点击窗口关闭图标关闭窗口 drawPanel pa=new drawPanel();/创建容器JPanel类pa的对象 pa.setPreferredSize(new Dimension(350,100);/设置JPanel类pa的对象的大小/f.setBackground(Color.cyan);/设置背景颜色 Container cp=f.getContentPane();/创建一个返回此窗体的contentPane对象/cp的容器布局为BorderLayout,添加pa的对象到cp的容器中并居中,cp.add(pa,BorderLayout.CENTER);f.pack();/调整窗口 f.setVisible(true);/设置窗口为可见 public static void main(String args)new C9_6();该程序的运行结果如图9.15所示。其中的JFrame类及JPanel类的相关内容请参阅本书第10章。,图9.15 程序C9_6的运行结果,【示例程序C9_7.java】绘制各种矩形。import java.awt.*;import.*;import;public class C9_7 extends JApplet public void paint(Graphics g)Graphics2D g2=(Graphics2D)g;g2.setPaint(Color.red);/设置前景颜色/draw Rectangle2D.Double Rectangle2D.Double rec=new Rectangle2D.Double(20,20,60,30);/创建矩形对象,g2.draw(rec);g2.drawString(Rectangle2D,20,70);/draw RoundRectangle2D.Double g2.setStroke(new BasicStroke(4);/设置线宽 g2.draw(new RoundRectangle2D.Double(100,20,60,30,10,10);/创建圆角矩形对象并画出 g2.drawString(RoundRectangle2D,100,70);g2.setPaint(Color.blue);/设置前景颜色/fill Rectangle2D.Double Rectangle2D.Double rec1=new Rectangle2D.Double(20,80,60,30);g2.fill(rec1);g2.drawString(Rectangle2D,20,120);,/fill RoundRectangle2D.Double g2.setStroke(new BasicStroke(4);/设置线宽 RoundRectangle2D.Double rorec=new RoundRectangle2D.Double(100,80,60,30,10,10);g2.fill(rorec);g2.drawString(“RoundRectangle2D”,100,120);该程序的运行结果如图9.16所示。,图9.16 程序C9_7的运行结果,9.4.3 绘制椭圆、圆及弧在Java 2D API中,绘制一个椭圆就是使用椭圆类的构造方法来创建一个椭圆对象。椭圆类的构造方法是:Ellipse2D.Float(float x,float y,float w,float h)这个构造方法中有4个参数,分别是椭圆外切矩形的左上角顶点坐标x,y;椭圆的宽度w和高度h(当然也是外切矩形的宽度和高度)。这些参数的数据类型可以是float型或double型。显然,当椭圆的宽度w和高度h相等时,就是一个圆。因此,使用绘制椭圆的构造方法即可绘制圆。,画弧可看成是画部分椭圆。绘制一个弧的构造方法如下:Arc2D.Float(float x,float y,float w,float h,float start,float extent,int type)这个构造方法中有7个参数,其中前4个参数x、y、w、h的含义与椭圆中参数的意义相同,另外3个参数中,start为起始角度,extent为弧角度,type为弧的连接类型。弧角度extent用度数来衡量,表明一段弧在两个角度之间绘制,即表示从起始角度转多少角度画弧,extent为正,表示逆时针画弧,extent为负,表示顺时针画弧。弧的连接类型有OPEN、CHORD、PIE三种,OPEN表示弧两端点无连接(弧),CHORD表示弧的两端点用直线连接(弦),PIE表示弧两端连接成扇形。表9.9给出了椭圆及弧构造方法中参数的说明及图示。,表9.9 创建椭圆及弧类对象的构造方法,下面我们通过一些示例来说明怎样绘制这些图形。【示例程序C9_8.java】绘制椭圆、圆及扇形。import java.awt.*;import.*;import;public class C9_8 extends JApplet public void paint(Graphics g)Graphics2D g2=(Graphics2D)g;g2.setPaint(Color.red);/设置前景颜色,g2.setStroke(new BasicStroke(2);/设置线宽/绘制弧 g2.draw(new Arc2D.Double(15,15,80,80,60,125,Arc2D.OPEN);g2.draw(new Arc2D.Double(100,15,80,80,60,125,Arc2D.CHORD);g2.draw(new Arc2D.Double(200,15,80,80,60,125,Arc2D.PIE);g2.fill(new Arc2D.Double(280,15,80,80,60,125,Arc2D.OPEN);g2.drawString(Arc2D,100,90);/绘制圆及椭圆 g2.drawString(Ellipse2D,100,220);,g2.setPaint(Color.lightGray);Ellipse2D.Double e1=new Ellipse2D.Double(15,120,100,50);Ellipse2D.Double e2=new Ellipse2D.Double(150,120,80,80);g2.fill

    注意事项

    本文(面向对象的程序设计-Java张白一第三版第9章.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开