Java程序设计课件高晓黎第十章文本显示与图形图像处理.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Java程序设计课件高晓黎第十章文本显示与图形图像处理.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 程序设计 课件 高晓黎 第十 文本 显示 图形图像 处理
- 资源描述:
-
1、Java程序设计课件高晓黎第十章文本显示与图形图像处理第十章第十章 文本显示与图形图像处理文本显示与图形图像处理 第1章走马观花看Java 本章知识重点3132GUI组件及Graphics类的绘图方法 33字体设置34基本图形绘制的各方法及画布CanvasJava图像处理35与图形图像处理相关的类 本章知识难点33基本图形绘制的各方法及画布Canvas343132GUI组件及Graphics类的绘图方法 字体设置及颜色设置图像的静态、动态处理Java绘图基础 JavaJava的绘图机制的绘图机制 与图形图像处理相关的类与图形图像处理相关的类 java java中支持图形图像处理的类与接口主要定
2、义于中支持图形图像处理的类与接口主要定义于java.awtjava.awt类库中类库中31Java绘图基础GraphicsGraphics类类 GraphicsGraphics类中封装了几乎所有的图形处理的方法,该类用于在类中封装了几乎所有的图形处理的方法,该类用于在一个二维坐标系中绘制图形与显示格式化文字。由于一个二维坐标系中绘制图形与显示格式化文字。由于GraphicsGraphics类定义于类定义于java.awtjava.awt包中,在绘制图形的程序中,必须引入包中,在绘制图形的程序中,必须引入java.awtjava.awt,即在程序开头需加上以下语句:,即在程序开头需加上以下语句:
3、import java.awt.import java.awt.*;或或import java.awt.Graphicsimport java.awt.Graphics;32Java绘图基础 Graphics Graphics类的绘图区域为能够绘制并显示图形的一些组件,类的绘图区域为能够绘制并显示图形的一些组件,坐标原点在组件的左上角,坐标原点在组件的左上角,X X轴为水平方向,坐标值从左轴为水平方向,坐标值从左至右逐渐增大,至右逐渐增大,Y Y轴在垂直方向,坐标值从上向下逐渐增轴在垂直方向,坐标值从上向下逐渐增大。大。JavaJava坐标的度量单位是像素,在坐标的度量单位是像素,在JavaJ
4、ava的图形坐标系的图形坐标系统中,坐标值只能为整数。由于不同的平台具体实现绘统中,坐标值只能为整数。由于不同的平台具体实现绘图功能中存在着一定差异,图功能中存在着一定差异,GraphicsGraphics类为抽象类,不能类为抽象类,不能用用newnew命令创建命令创建GraphicsGraphics类实例对象,类实例对象,JavaJava只提供给用户只提供给用户一个不依赖于具体平台的通用接口,使用户能够调用一个不依赖于具体平台的通用接口,使用户能够调用GraphicsGraphics类的各种绘图方法,实现绘图与绘制文本的功类的各种绘图方法,实现绘图与绘制文本的功能。能。Java绘图基础 GU
5、I程序中,文本的输出显示是作为图形对象来处理的,控制台应用程序中的System.out.println()方法,只能以DOS字符的形式,在命令行窗口上显示文字。GUI界面中字符串信息的显示,要使用Graphics或Graphics2D提供的绘制字符或字符串信息的成员方法。图形文本图形文本33Java绘图基础Graphics类提供了三种绘制文字的方法:字符串输出方法:drawString(String s,int x,int y)。字符数组输出方法:drawChars(char s,int offset,int length,int x,int y)。字节数组输出方法:drawBytes(byt
6、e s,int offset,int length,int x,int y)。其中x、y参数为字符串输出的位置坐标。例如:g.drawString(“我的爱好是读书和听音乐”,50,100);语句将会绘出一串文本,输出位置坐标为(50,100)。Java绘图基础 GUI编程中,Color类定义了操作颜色的常量与方法,该类的完整包路径为java.awt.Color。Color类常用的三种构造方法的定义为:public Color(int r,int g,int b);public Color(float r,float g,float b);public Color(int rgb);Color
7、类中封装了常用的13种标准颜色的符号常量。如:Color.BLACK Color.WHITE Color.RED Color.GREEN Color.BLUE Color.YELLOW 等颜色设置颜色设置34Java绘图基础此外,Color类还提供了获取RGB颜色分量的对应方法:public int getRed();/获取当前颜色的红色分量值(范围为0,255)。public int getGreen();/获取当前颜色的绿色分量值(范围为0,255)。public int getBlue();/获取当前颜色的蓝色分量值(范围为0,255)。Java绘图基础 如创建一个以粉红色pink(RG
8、B值为:255,175,175)前景显示“姓名”的标签对象,可用以下语句实现:Color labelColor=new Color(255,175,175);Label lblName=new Label(“姓名”);lblName.setForeground(labelColor);或者用以下等价的方式实现:Label lblName=new Label(“姓名”);lblName.setForeground(Color.PINK);Java绘图基础 java.awt.Component类作为大多数GUI组件的基类,定义了paint()方法,用来实现在组件上绘制图形的功能。applet小程序
9、的基类:Applet或Japplet,也间接地由Component类派生,因此applet小程序也具有paint()方法 paint()方法定义:void paint(Graphics g);paint()方法通常由系统自动调用,用户一般不能直接在程序中显式调用它,而是通过repaint()方法来间接调用它。组件首次显示外观时,applet小程序在被加载运行时,系统都会调用相关的paint()方法。GUIGUI组件的绘图方法组件的绘图方法ComponentComponent类与类与paint()paint()方法方法 31Java绘图基础此外,Component类中还定义了另外两个直接或间接调
10、用paint()方法的方法:更新方法update(Graphics g);当组件的尺寸、外观等被改变时,系统将调用此方法,重新绘制组件。update()方法的实现中包含了对paint()方法的调用。重绘方法repaint();该方法没有参数,执行时会清除组件的原有背景图形,并使用paint()方法重新绘制该组件。用户可以在程序中直接调用repaint()方法,当组件为轻量级组件时,该方法会直接调用paint()方法,否则会通过调用update()方法间接调用paint()方法。Java绘图基础【例】在一个300200的Frame窗口内,用红色绘制四叶玫瑰曲线。Java绘图基础import ja
11、va.awt.*;import java.awt.event.*;import java.awt.Color;public class Exa_10_1 extends Frame private static final double PI=3.1415926;private int appWidth,appHeight;public Exa_10_1(String title)super(title);this.setSize(300,200);/实现关闭窗口的功能 this.addWindowListener(new WindowAdapter()public void windowCl
12、osing(WindowEvent e)System.exit(0););Java绘图基础public void paint(Graphics g)super.paint(g);/调用父类的绘制方法 /获取当前窗口的宽度与高度值 appWidth=this.getWidth();appHeight=this.getHeight();int ox,oy,x,y;/设置原点(ox,oy)的坐标为当前窗口中心 ox=appWidth/2;oy=appHeight/2;g.setColor(Color.RED);/设置绘图的前景色 Java绘图基础/绘制坐标轴 g.drawLine(ox,10,ox,
13、appHeight);g.drawLine(0,oy,appWidth,oy);/定义控制角度与半径变化的变量 int i,j=10;double angle,r;while (j100)for(i=0;i1023;i+)/计算最新的角度 angle=i*PI/512;r=j*Math.sin(2*angle);Java绘图基础/计算最新的轨迹点坐标 x=(int)Math.round(r*Math.cos(angle)*2);y=(int)Math.round(r*Math.sin(angle);g.fillOval(ox+x,oy+y,1,1);/画轨迹点 j=j+5;/增进的步长 pub
14、lic static void main(String args)Exa_10_1 app=new Exa_10_1(Paint()Method Usage);app.setVisible(true);Java绘图基础 组件的基类组件的基类ComponentComponent类提供了一组类提供了一组getget类型的方法用来获类型的方法用来获取当前绘图上下文环境的一些重要参数。取当前绘图上下文环境的一些重要参数。getGraphics()getGraphics()为当前组件创建为当前组件创建 graphics graphics上下文环境上下文环境getGraphicsConfiguration
15、()getGraphicsConfiguration()获取相关的获取相关的GraphicsGraphics设置设置getForeground()getForeground()获取与当前组件的前景颜色获取与当前组件的前景颜色getBackground()getBackground()获取与当前组件的背景颜色获取与当前组件的背景颜色getFont()getFont()获取与当前组件的字体对象获取与当前组件的字体对象getFontMetrics(Font font)getFontMetrics(Font font)获取指定字体的样式信息获取指定字体的样式信息ComponentComponent类的
16、类的get/setget/set方法组方法组32Java绘图基础Component类还提供了一组用来设置外观与行为的set方法:setEnabled(),设置组件的可用性。setVisible(),设置组件的可见性。setForeground(),设置组件的前景色。setBackground(),设置组件的背景色。setBounds(),设置组件的起始位置与尺寸大小。setLocation(),设置组件的起始位置。setSize(),设置组件的尺寸大小。setPreferredSize(),设置组件首选的尺寸。setMaximumSize(),设置组件的最大尺寸。setMinimumSize(
17、),设置组件的最小尺寸。此外,常用的还有一个设置组件显示文字字体类型与样式的一个方法:public void setFont(Font f)。Java绘图基础【例】用组件的getGraphics()方法实现如下所述的功能:在一个300200的JFrame窗口内,放置一个标签与一个按钮,当点击按钮后,标签中绘制一个黄色的椭圆,并在椭圆内显示蓝色的RGB值。Java绘图基础import java.awt.*;import java.awt.event.*;import java.awt.Color;import javax.swing.*;public class Exa_10_2 extends
18、 JFrame implements ActionListener private JLabel jlblDraw=new JLabel();private JButton jbtnDraw=new JButton(开始绘图);public Exa_10_2(String title)super(title);this.setSize(300,200);jlblDraw.setSize(300,150);/实现关闭窗口的功能 Java绘图基础this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jbtnDraw.addActionListene
19、r(this);Container contentPane=this.getContentPane();contentPane.setLayout(new BorderLayout();contentPane.add(jlblDraw,BorderLayout.CENTER);contentPane.add(jbtnDraw,BorderLayout.SOUTH);/按钮点击事件响应方法 public void actionPerformed(ActionEvent e)/创建标签的Graphics上下文环境 Graphics g=jlblDraw.getGraphics();Java绘图基础
20、/用黄色画一填充椭圆 g.setColor(Color.YELLOW);g.fillOval(50,10,200,130);/用蓝色显示当前颜色的字符串 g.setColor(Color.BLUE);g.drawString(g.getColor().toString(),65,75);/使按钮变得不再可用 jbtnDraw.setEnabled(false);public static void main(String args)Exa_10_2 app=new Exa_10_2(getGraphics()Method Usage);app.setVisible(true);Java绘图基础
21、paintComponent(),用来绘制几何图形,渲染图形文字。paintComponent()方法的原型定义如下:protected void paintComponent(Graphics g);JComponent类的paintComponent()方法与Component类的paint()具有完全相同的参数形式,两种方法的功能与使用也基本类似。JComponentJComponent类与类与paintComponent()paintComponent()方法方法 33Java绘图基础 Swing应用中,经常会在JPanel组件中绘制图形。通常的做法是:定义一个JPanel类的子类,在
22、该子类中覆盖/重写类的paintComponent()方法,在方法体内放入绘图的操作语句。然后再将该JPanel组件添加到主窗口的内容窗格(ContentPane)内。具体的实现结构类似于如下的代码:class drawPanel extends Jpanel public void paintComponent(Graphics g)/super.paintComponent(g);/相关的图形或文字绘制语句 字体设置 一个Font类的对象表示了一种字体显示效果,包括字体类型、Font MyFont=new Font(TimesRoman,Font.BOLD,12);MyFont对应的是12
23、磅TimesRoman类型的黑体字,其中指定字型时要用到Font类三个常量:Font.PLAIN,Font.BOLD,Font.ITALIC。如果希望使用该Font对象,则可以利用Graphics类的setFont()方法:g.setFont(MyFont);如果希望指定控制组件,如按钮或文本框中的字体效果,则可以使用控制组件的方法setFont()。如设btn是一个按钮对象,则语句:btn.setFont(MyFont);另外,与setFont()方法相对的getFont()方法将返回当前Graphics或组件对象使用的字体。FontFont类类字体设置【例】获取当前系统中所有可用字体的名称
24、,在标签中显示出这些可用字体的数目,在文本区中显示出这些可用字体的名称。字体设置import java.awt.*;import javax.swing.*;import java.awt.event.*;public class Exa_10_4 extends JFrame implements ActionListener /定义GUI所涉及的组件 JLabel jlblTotalFonts=new JLabel();JButton jbtnDisp=new JButton(显示当前可用字体名称);JTextArea jtxtaFontNames=new JTextArea();JScr
25、ollPane jsclpane4txtArea=new JScrollPane(jtxtaFontNames);字体设置 public Exa_10_4(String title)super(title);jbtnDisp.addActionListener(this);/为标签组件设置前景色为红色 jlblTotalFonts.setForeground(new Color(255,0,0);/设置文本区组件为不可编辑状态 jtxtaFontNames.setEditable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE
展开阅读全文