Java程序设计课件(高晓黎)第十章文本显示与图形图像处理.ppt
《Java程序设计课件(高晓黎)第十章文本显示与图形图像处理.ppt》由会员分享,可在线阅读,更多相关《Java程序设计课件(高晓黎)第十章文本显示与图形图像处理.ppt(73页珍藏版)》请在三一办公上搜索。
1、,第十章 文本显示与图形图像处理,第1章走马观花看Java,目 录,重点与难点点拨,Java绘图基础,Java图像处理,经典练习题,Graphics绘图,字体设置,本章知识重点,GUI组件及Graphics类的绘图方法,字体设置,基本图形绘制的各方法及画布Canvas,Java图像处理,与图形图像处理相关的类,本章知识难点,Java绘图基础,Java的绘图机制,与图形图像处理相关的类 java中支持图形图像处理的类与接口主要定义于java.awt类库中,Java绘图基础,Graphics类,Graphics类中封装了几乎所有的图形处理的方法,该类用于在一个二维坐标系中绘制图形与显示格式化文字。
2、由于Graphics类定义于java.awt包中,在绘制图形的程序中,必须引入java.awt,即在程序开头需加上以下语句:import java.awt.*;或import java.awt.Graphics;,Java绘图基础,Graphics类的绘图区域为能够绘制并显示图形的一些组件,坐标原点在组件的左上角,X轴为水平方向,坐标值从左至右逐渐增大,Y轴在垂直方向,坐标值从上向下逐渐增大。Java坐标的度量单位是像素,在Java的图形坐标系统中,坐标值只能为整数。由于不同的平台具体实现绘图功能中存在着一定差异,Graphics类为抽象类,不能用new命令创建Graphics类实例对象,Ja
3、va只提供给用户一个不依赖于具体平台的通用接口,使用户能够调用Graphics类的各种绘图方法,实现绘图与绘制文本的功能。,Java绘图基础,GUI程序中,文本的输出显示是作为图形对象来处理的,控制台应用程序中的System.out.println()方法,只能以DOS字符的形式,在命令行窗口上显示文字。GUI界面中字符串信息的显示,要使用Graphics或Graphics2D提供的绘制字符或字符串信息的成员方法。,图形文本,Java绘图基础,Graphics类提供了三种绘制文字的方法:字符串输出方法:drawString(String s,int x,int y)。字符数组输出方法:draw
4、Chars(char s,int offset,int length,int x,int y)。字节数组输出方法:drawBytes(byte 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,i
5、nt b);public Color(float r,float g,float b);public Color(int rgb);Color类中封装了常用的13种标准颜色的符号常量。如:Color.BLACK Color.WHITE Color.RED Color.GREEN Color.BLUE Color.YELLOW 等,颜色设置,Java绘图基础,此外,Color类还提供了获取RGB颜色分量的对应方法:public int getRed();/获取当前颜色的红色分量值(范围为0,255)。public int getGreen();/获取当前颜色的绿色分量值(范围为0,255)。pu
6、blic int getBlue();/获取当前颜色的蓝色分量值(范围为0,255)。,Java绘图基础,如创建一个以粉红色pink(RGB值为: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绘图基础,j
7、ava.awt.Component类作为大多数GUI组件的基类,定义了paint()方法,用来实现在组件上绘制图形的功能。applet小程序的基类:Applet或Japplet,也间接地由Component类派生,因此applet小程序也具有paint()方法 paint()方法定义:void paint(Graphics g);paint()方法通常由系统自动调用,用户一般不能直接在程序中显式调用它,而是通过repaint()方法来间接调用它。组件首次显示外观时,applet小程序在被加载运行时,系统都会调用相关的paint()方法。,GUI组件的绘图方法,Component类与paint(
8、)方法,Java绘图基础,此外,Component类中还定义了另外两个直接或间接调用paint()方法的方法:更新方法update(Graphics g);当组件的尺寸、外观等被改变时,系统将调用此方法,重新绘制组件。update()方法的实现中包含了对paint()方法的调用。重绘方法repaint();该方法没有参数,执行时会清除组件的原有背景图形,并使用paint()方法重新绘制该组件。用户可以在程序中直接调用repaint()方法,当组件为轻量级组件时,该方法会直接调用paint()方法,否则会通过调用update()方法间接调用paint()方法。,Java绘图基础,【例】在一个30
9、0200的Frame窗口内,用红色绘制四叶玫瑰曲线。,Java绘图基础,import java.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.addWindowLis
10、tener(new WindowAdapter()public void windowClosing(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)
11、;/设置绘图的前景色,Java绘图基础,/绘制坐标轴 g.drawLine(ox,10,ox,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);
12、g.fillOval(ox+x,oy+y,1,1);/画轨迹点 j=j+5;/增进的步长 public static void main(String args)Exa_10_1 app=new Exa_10_1(Paint()Method Usage);app.setVisible(true);,Java绘图基础,组件的基类Component类提供了一组get类型的方法用来获取当前绘图上下文环境的一些重要参数。getGraphics()为当前组件创建 graphics上下文环境getGraphicsConfiguration()获取相关的Graphics设置getForeground()获取
13、与当前组件的前景颜色getBackground()获取与当前组件的背景颜色getFont()获取与当前组件的字体对象getFontMetrics(Font font)获取指定字体的样式信息,Component类的get/set方法组,Java绘图基础,Component类还提供了一组用来设置外观与行为的set方法:setEnabled(),设置组件的可用性。setVisible(),设置组件的可见性。setForeground(),设置组件的前景色。setBackground(),设置组件的背景色。setBounds(),设置组件的起始位置与尺寸大小。setLocation(),设置组件的起始
14、位置。setSize(),设置组件的尺寸大小。setPreferredSize(),设置组件首选的尺寸。setMaximumSize(),设置组件的最大尺寸。setMinimumSize(),设置组件的最小尺寸。此外,常用的还有一个设置组件显示文字字体类型与样式的一个方法:public void setFont(Font f)。,Java绘图基础,【例】用组件的getGraphics()方法实现如下所述的功能:在一个300200的JFrame窗口内,放置一个标签与一个按钮,当点击按钮后,标签中绘制一个黄色的椭圆,并在椭圆内显示蓝色的RGB值。,Java绘图基础,import java.awt.
15、*;import java.awt.event.*;import java.awt.Color;import javax.swing.*;public class Exa_10_2 extends 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
16、);/实现关闭窗口的功能,Java绘图基础,this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jbtnDraw.addActionListener(this);Container contentPane=this.getContentPane();contentPane.setLayout(new BorderLayout();contentPane.add(jlblDraw,BorderLayout.CENTER);contentPane.add(jbtnDraw,BorderLayout.SOUTH);/按钮点击事件响应方法 publi
17、c void actionPerformed(ActionEvent e)/创建标签的Graphics上下文环境 Graphics g=jlblDraw.getGraphics();,Java绘图基础,/用黄色画一填充椭圆 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 voi
18、d main(String args)Exa_10_2 app=new Exa_10_2(getGraphics()Method Usage);app.setVisible(true);,Java绘图基础,paintComponent(),用来绘制几何图形,渲染图形文字。paintComponent()方法的原型定义如下:protected void paintComponent(Graphics g);JComponent类的paintComponent()方法与Component类的paint()具有完全相同的参数形式,两种方法的功能与使用也基本类似。,JComponent类与paintC
19、omponent()方法,Java绘图基础,Swing应用中,经常会在JPanel组件中绘制图形。通常的做法是:定义一个JPanel类的子类,在该子类中覆盖/重写类的paintComponent()方法,在方法体内放入绘图的操作语句。然后再将该JPanel组件添加到主窗口的内容窗格(ContentPane)内。具体的实现结构类似于如下的代码:class drawPanel extends Jpanel public void paintComponent(Graphics g)/super.paintComponent(g);/相关的图形或文字绘制语句,字体设置,一个Font类的对象表示了一种
20、字体显示效果,包括字体类型、Font MyFont=new Font(TimesRoman,Font.BOLD,12);MyFont对应的是12磅TimesRoman类型的黑体字,其中指定字型时要用到Font类三个常量:Font.PLAIN,Font.BOLD,Font.ITALIC。如果希望使用该Font对象,则可以利用Graphics类的setFont()方法:g.setFont(MyFont);如果希望指定控制组件,如按钮或文本框中的字体效果,则可以使用控制组件的方法setFont()。如设btn是一个按钮对象,则语句:btn.setFont(MyFont);另外,与setFont()方
21、法相对的getFont()方法将返回当前Graphics或组件对象使用的字体。,Font类,字体设置,【例】获取当前系统中所有可用字体的名称,在标签中显示出这些可用字体的数目,在文本区中显示出这些可用字体的名称。,字体设置,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 jbtnDis
22、p=new JButton(显示当前可用字体名称);JTextArea jtxtaFontNames=new JTextArea();JScrollPane jsclpane4txtArea=new JScrollPane(jtxtaFontNames);,字体设置,public Exa_10_4(String title)super(title);jbtnDisp.addActionListener(this);/为标签组件设置前景色为红色 jlblTotalFonts.setForeground(new Color(255,0,0);/设置文本区组件为不可编辑状态 jtxtaFontNam
23、es.setEditable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/添加各个组件到窗口的内容窗格中 Container contentPane=this.getContentPane();contentPane.setLayout(new BorderLayout();contentPane.add(jlblTotalFonts,BorderLayout.NORTH);,字体设置,contentPane.add(jsclpane4txtArea,BorderLayout.CENTER);contentPane.a
24、dd(jbtnDisp,BorderLayout.SOUTH);this.setSize(300,300);this.setVisible(true);/响应按钮点击事件 public void actionPerformed(ActionEvent e)jbtnDisp.setEnabled(false);/使自己失效以免两次被点击 String availableFontNames;/获取当前平台可用的字体集 GraphicsEnvironment ge=GraphicsEnvironment.,字体设置,getLocalGraphicsEnvironment();availableFon
25、tNames=ge.getAvailableFontFamilyNames();/当前平台可用字体的总数 int total=availableFontNames.length;jlblTotalFonts.setText(当前平台系统可用的字体总数为:+total+);/将当前平台可用字体名称添加到文本区中 for(int k=0;ktotal;k+)jtxtaFontNames.append(availableFontNamesk+n);public static void main(String args)new Exa_10_4(Font Usage Demo);,字体设置,FontM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 程序设计 课件 高晓黎 第十 文本 显示 图形图像 处理
链接地址:https://www.31ppt.com/p-5374364.html