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类
3、实例对象,Java只提供给用户一个不依赖于具体平台的通用接口,使用户能够调用Graphics类的各种绘图方法,实现绘图与绘制文本的功能。,Java绘图基础,GUI程序中,文本的输出显示是作为图形对象来处理的,控制台应用程序中的System.out.println()方法,只能以DOS字符的形式,在命令行窗口上显示文字。GUI界面中字符串信息的显示,要使用Graphics或Graphics2D提供的绘制字符或字符串信息的成员方法。,图形文本,Java绘图基础,Graphics类提供了三种绘制文字的方法: 字符串输出方法:drawString(String s,int x,int y)。 字符数组
4、输出方法:drawChars(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 Col
5、or(int r,int g,int 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(); /
6、获取当前颜色的绿色分量值(范围为0,255)。 public 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.setF
7、oreground(Color.PINK);,Java绘图基础,java.awt.Component类作为大多数GUI组件的基类,定义了paint()方法,用来实现在组件上绘制图形的功能。applet小程序的基类:Applet或Japplet,也间接地由Component类派生,因此applet小程序也具有paint()方法 paint()方法定义:void paint(Graphics g); paint()方法通常由系统自动调用,用户一般不能直接在程序中显式调用它,而是通过repaint()方法来间接调用它。组件首次显示外观时,applet小程序在被加载运行时,系统都会调用相关的paint
8、()方法。,GUI组件的绘图方法,Component类与paint()方法,Java绘图基础,此外,Component类中还定义了另外两个直接或间接调用paint()方法的方法: 更新方法update(Graphics g); 当组件的尺寸、外观等被改变时,系统将调用此方法,重新绘制组件。update()方法的实现中包含了对paint()方法的调用。 重绘方法repaint(); 该方法没有参数,执行时会清除组件的原有背景图形,并使用paint()方法重新绘制该组件。用户可以在程序中直接调用repaint()方法,当组件为轻量级组件时,该方法会直接调用paint()方法,否则会通过调用upda
9、te()方法间接调用paint()方法。,Java绘图基础,【例】在一个300200的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.
10、setSize(300,200); /实现关闭窗口的功能 this.addWindowListener(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)的坐标为当前
11、窗口中心 ox=appWidth/2; oy=appHeight/2; g.setColor(Color.RED); /设置绘图的前景色,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 =(i
12、nt)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; /增进的步长 public static void main(String args) Exa_10_1 app=new Exa_10_1(“Paint() Method Usage“); app.setVisible(true); ,Java绘图基础,组件的基类Component类提供了一组get类型的方法用来获取当前绘图上下文环境的一些重要参数。 getGr
13、aphics()为当前组件创建 graphics上下文环境 getGraphicsConfiguration()获取相关的Graphics设置 getForeground()获取与当前组件的前景颜色 getBackground()获取与当前组件的背景颜色 getFont()获取与当前组件的字体对象 getFontMetrics(Font font)获取指定字体的样式信息,Component类的get/set方法组,Java绘图基础,Component类还提供了一组用来设置外观与行为的set方法: setEnabled(),设置组件的可用性。 setVisible(),设置组件的可见性。 set
14、Foreground(),设置组件的前景色。 setBackground(),设置组件的背景色。 setBounds(),设置组件的起始位置与尺寸大小。 setLocation(),设置组件的起始位置。 setSize(),设置组件的尺寸大小。 setPreferredSize(),设置组件首选的尺寸。 setMaximumSize(),设置组件的最大尺寸。 setMinimumSize(),设置组件的最小尺寸。 此外,常用的还有一个设置组件显示文字字体类型与样式的一个方法:public void setFont(Font f)。,Java绘图基础,【例】用组件的getGraphics()方法
15、实现如下所述的功能:在一个300200的JFrame窗口内,放置一个标签与一个按钮,当点击按钮后,标签中绘制一个黄色的椭圆,并在椭圆内显示蓝色的RGB值。,Java绘图基础,import java.awt.*; 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 jbtnDra
16、w=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.addActionListener(this); Container contentPane=this.getContentPane(); contentPane.setLayout(new Borde
17、rLayout(); contentPane.add(jlblDraw,BorderLayout.CENTER); contentPane.add(jbtnDraw,BorderLayout.SOUTH); /按钮点击事件响应方法 public void actionPerformed(ActionEvent e) /创建标签的Graphics上下文环境 Graphics g=jlblDraw.getGraphics();,Java绘图基础,/用黄色画一填充椭圆 g.setColor(Color.YELLOW); g.fillOval(50,10,200,130); /用蓝色显示当前颜色的字符
18、串 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绘图基础,paintComponent(),用来绘制几何图形,渲染图形 文字。paintComponent()方法的原型定义如下: pro
19、tected void paintComponent(Graphics g); JComponent类的paintComponent()方法与Component 类的paint()具有完全相同的参数形式,两种方法的 功能与使用也基本类似。,JComponent类与paintComponent()方法,Java绘图基础,Swing应用中,经常会在JPanel组件中绘制图形。通常的做法是:定义一个JPanel类的子类,在该子类中覆盖/重写类的paintComponent()方法,在方法体内放入绘图的操作语句。然后再将该JPanel组件添加到主窗口的内容窗格(ContentPane)内。 具体的实现
20、结构类似于如下的代码: class drawPanel extends Jpanel public void paintComponent(Graphics g) / super.paintComponent(g); /相关的图形或文字绘制语句 ,字体设置,一个Font类的对象表示了一种字体显示效果,包括字体类型、 Font MyFont = new Font ( TimesRoman, Font.BOLD, 12 ); MyFont对应的是12磅TimesRoman类型的黑体字,其中指定字型时 要用到Font类三个常量:Font.PLAIN, Font.BOLD, Font.ITALIC。
21、如果希望使用该Font对象,则可以利用Graphics类的setFont ( )方法: g. setFont ( MyFont ); 如果希望指定控制组件,如按钮或文本框中的字体效果,则可以 使用控制组件的方法setFont( )。如设btn是一个按钮对象,则语 句: btn.setFont(MyFont); 另外,与setFont( )方法相对的getFont( )方法将返回当前 Graphics或组件对象使用的字体。,Font类,字体设置,【例】获取当前系统中所有可用字体的名称,在标签中显示出这些可用字体的数目,在文本区中显示出这些可用字体的名称。,字体设置,import java.awt
22、.*; 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(); JScrollPane jsclpane4txtArea=new JScrollPane(jtxtaF
23、ontNames);,字体设置,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); /添加各个组件到窗口的内容窗格中 Container contentPane
24、=this.getContentPane(); contentPane.setLayout(new BorderLayout(); contentPane.add(jlblTotalFonts,BorderLayout.NORTH);,字体设置,contentPane.add(jsclpane4txtArea,BorderLayout.CENTER); contentPane.add(jbtnDisp,BorderLayout.SOUTH); this.setSize(300,300); this.setVisible(true); /响应按钮点击事件 public void actionPe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 程序设计 课件 高晓黎 第十 文本 显示 图形图像 处理
链接地址:https://www.31doc.com/p-3481896.html