Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java语言程序设计-JAVA图形与图像处理

Similar presentations


Presentation on theme: "Java语言程序设计-JAVA图形与图像处理"— Presentation transcript:

1 Java语言程序设计-JAVA图形与图像处理
2018/11/11 Java语言程序设计-JAVA图形与图像处理 教师:段鹏飞

2 1、学会使用匿名类和了解它的特点 2、了解Java图形坐标系、颜色和像素等概念 3、在绘图中学会使用paint(graphics g)方法
2018/11/11 知识点 1、学会使用匿名类和了解它的特点 2、了解Java图形坐标系、颜色和像素等概念 3、在绘图中学会使用paint(graphics g)方法

3 单事件源的“多个事件” 学生可发生多种事件 学生的生活中,可能发生... 开导帮助 讲 解 “噗!” “哎呦...” 生病了 学习困难
生活困难 讲 解 开导帮助

4 分析: “单事件源-多事件”处理 学 生 事件源 事 件 监听器 治 疗 开导帮助 讲 解 左键 单击 鼠标 监听 鼠标操作 键入 文本
学习问题 生活困难 生 病 教 师 辅导员 医 生 治 疗 开导帮助 讲 解 事件源 文本框 左键 单击 鼠标 监听 鼠标操作 键入 文本 按键 监听 输入文本 变换 焦点 监听 焦点变换 事 件 监听器 具体工作

5 匿名类的方式实现事件处理

6 匿名类 匿名类的定义 顾名思义就是未被命名的类 匿名类的特征 在程序中只使用(即:被实例化)一次

7 事件适配器类的特征 事件适配器类 适配器类就是一个特殊的事件监听器类
Java语言只针对包含多个抽象方法的监听器接口,提供了相应的XXXAdapter(适配器) 比如:WindowListener接口的适配器类是WindowAdapter

8 事件处理 实现事件处理的步骤 创建事件监听器类 创建事件监听器对象 注册事件监听器

9 程序功能需求 解决方法 程序设计.例一 绘制一个窗体 窗体内绘制一个按钮,名为“点我”
按下按钮时,在命令行打印信息 打印内容为 “我知道你按下按钮啦!” 解决方法 设计自己的带有按钮的窗体类 (派生自Java.awt.Frame类) 设计自己的按钮事件监听器类 (实现ActionListener接口、并完成ActionPerformed方法) 创建按钮事件监听器类对象,并绑定到“按钮”上 (调用按钮类的 addActionListener方法)

10 事件处理例1.代码 设计自己的窗体类 按钮 事件源 注册监听器 主类 监听器类
import java.awt.*; import java.awt.event.*; class ButtonListener implements ActionListener { public void actionPerformed ( ActionEvent e ) { System.out.println ( “我知道你按下按钮啦“ ); } 按钮 窗体 主类 监听器 监听器类 class myButtonFrame extends Frame { Button btn; myButtonFrame(String s) { //构造函数 super(s); this.setSize(200,120); /* 创建按钮*/ btn = new Button("点击"); this.add(btn); // 事件监听器创建和注册 ButtonListener bl = new ButtonListener(); btn.addActionListener(bl); } 设计自己的窗体类 按钮 事件源 注册监听器 public class ActionEventTest { // 主类 public static void main(String args[]){ myButtonFrame frm = new myButtonFrame("ActionEventTest"); frm.show(); // 显示窗体 } 主类

11 程序设计. 例一. 运行结果

12 Java语言程序设计-JAVA图形与图像处理
2018/11/11 Java语言程序设计-JAVA图形与图像处理 教师:段鹏飞

13 Java语言程序设计-手把手教大家PhotoShop
2018/11/11 Java语言程序设计-手把手教大家PhotoShop 教师:段鹏飞

14 1 图形处理坐标系 组件的坐标系统 程序运行过程中,值不能改变的量称为常量
值可以改变的量称为变量。一个变量有一个名字,并在内存中占据一定的存储单元。变量的值就存储在变量所占据的内存单元中,所以,变量名代表的是变量值在内存中的地址。 变量类型 变量名1 [=值1],变量名2=[值2]……; “见名知意” “先定义,后使用” 组件的坐标系统

15 颜色

16 图像 例:(1) 单一灰色 (2)渐变灰度。

17 图像处理技术 像素点数组的构成

18 像素点是一个具有Alpha(透明度)、Red(红)、Green(绿)和Blue(蓝)四个分量表示的整数,记作0xAARRGGBB。其中A、R、G、B的取值从0~f(十六进制)。
红色: 0xffff 绿色: 0xff00ff00 蓝色: 0xff0000ff 白色: 0xffffffff 黑色: 0xff000000 图像的像素点其排列如图6.14所示,我们按从左往右、从上往下的顺序取出像素点,构成一整型数组。

19 像素数组元素的排列

20 字型 字型主要包含:大小,样式,字体等

21 数字图像处理 包:java.awt.image

22 Graphics类的对象g可使用Graphics类的setColor/getColor方法来改变/获得当前颜色,g使用的默认颜色是黑色
black, blue, cyan, darkGray, gray, green, lighGray, magenta, orange, pink, red, white, yellow

23 getColor() 获得当前图形的色彩 setColor(Color c) 设置当前图形的色彩 getFont() 获得当前字体
Graphics类的Set/get方法 getColor() 获得当前图形的色彩 setColor(Color c) 设置当前图形的色彩 getFont() 获得当前字体 setFont(Font font) 设置当前字体

24 2.2 图像的基本操作(Image) 读取图像: getImage(url) 画图:g.drawImage()

25 菜单组件 菜单和对话框 不能将菜单组件直接添加到一般的容器中 不能使用布局管理器对它们进行布局
AWT提供的菜单机制是这样的:一个容器包含一个菜单条,一个菜单条中包含多个菜单,一个菜单中包含多个菜单或菜单项 和菜单相关的组件有四个:MenuBar, Menu, MenuItem, CheckboxMenuItem.

26 菜单条(MenuBar) 一个菜单条组件是一个水平容器,并作为所有菜单树的根。 一个窗体中只可以显示一个菜单条。 菜单条不能注册任何监听者。 例如: Frame fr = new Frame(); MenuBar mb = new MenuBar(); f.setMenuBar(mb)

27 菜单(Menu) 菜单组件提供了一个基本的下拉式菜单,它可以加入到一个菜单条或者另一个菜单中。 例如: MenuBar mb = new MenuBar(); Menu mu1 = new Menu(“File”); Menu mu2 = new Menu(“Edit”); mb.add(mu1); mb.add(mu2); f.setMenuBar(mb);

28 菜单项(MenuItem) 菜单项组件通常被加入到菜单中,以构成一个完整的菜单。 通常,将一个ActionListener注册到一个菜单项对象中,接收和处理选中菜单项的事件。 例如: Menu mu = new Menu(“File”); MenuItem mi1 = new MenuItem(“New”); MenuItem mi2 = new MenuItem(“Load”); mu.add(mi1); mu.add(mi2);

29 1 Java绘图类别

30 绘图方式 绘制字符串与字符数组 绘制直线、矩形、圆环 绘制带颜色的图形 绘制椭圆、圆弧 绘制多边形 使用clearRect方法

31 使用drawString方法在屏幕上显示串对象:
显示字符串与字符数组 使用drawString方法在屏幕上显示串对象: drawString(String s,int x,int y) 使用Graphics类的drawChar方法显示字符数组: drawChar(char data[],int offset,int length,int x,int y)

32 画图程序

33 画布Canvas 画布Canvas类是一个用来绘制图形的矩形组件,在画布中可以绘制各种图形,也可以响应鼠标和键盘事件。

34 Graphics类常用的绘图方法 方 法 说 明 drawLine(int x1, int y1, int x2, int y2)
方 法 说 明 drawLine(int x1, int y1, int x2, int y2) 绘制一条从(x1,y1)到(x2,y2)的直线 drawRect(int x, int y, int w, int h) 绘制一个顶点为(x,y),宽为w,高为h的矩形 drawOval(int x, int y, int w, int h) 绘制一个在顶点为(x,y),宽为w,高为h的矩形内接椭圆 drawArc(int x, int y, int w, int h, int s1, int s2) 绘制一段弧度为从s1到s1+s2的圆弧 clearRect(int x1, int y1, int x2, int y2) 用当前颜色填充的方法清除指定矩形区。 drawString(String s,int x,int y) 在(x,y)处显示字符串s drawImage(Image image, int x, int y, ImageObserver observer) 在(x,y)处显示图像image, observer为加载图像时的图像观察器 drawImage(Image image, int x, int y,int w,int h, ImageObserver observer) 在w宽h高的矩形区域内显示图像,图像能自动调整大小比例。

35 使用Graphics类的drawLine方法:
画直线 使用Graphics类的drawLine方法: drawLine(int x1,int y1,int x2,int y2) public void paint(Graphics g) { g.drawLine(0,0,160,80); }

36 drawRect方法: 画矩形 drawRect(int x,int y,int width,int height)
x,y指定矩形左上角的位置 width,height指定矩形的大小(单位:像素) public void paint(Graphics g) { g.drawRect(0,0,10,10); }

37 使用drawRoundRect方法画圆角矩形:
画矩形 使用drawRoundRect方法画圆角矩形: drawRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight) arcWidth, arcHeight指定矩形圆角的尺寸 public void paint(Graphics g) { g.drawRoundRect(0,0,150,170,40,25); }

38 使用drawRoundRect方法也可画圆环
public void paint(Graphics g) { g.drawRoundRect(0,0,50,50,50,50); }

39 画圆弧 使用图形类的drawArc方法: drawArc(int x,int y,int width,int height,int starAngle,int arcAngle) 弧的中心是它的外接矩形的中心,该矩形的左上角的坐标是(x,y),宽width,高height (starAngle,arcAngle单位是度,0度是3点钟的方位)这两个参数表示从startAngle的角度开始,逆时针画arcAngle度的弧

40 clearRect(int x,int y,int width,int height)
用背景色填充指定矩形以达到清除该矩形的效果,即当一个Gaphics对象使用该方法时,相当于在使用一个“橡皮擦” x,y被清除矩形左上角的坐标,另两个参数是被清除矩形的宽和高

41 绘制笑脸图形 变量的范围 分配的存储空间不一样。

42 作业与练习 如何来制作图形界面?它需要引入哪些包 在java中,什么是事件?简述处理事件的机制。 什么是布局管理器,它有什么作用? 请编写一个窗口来实现BorderLayout的布局。 请说明FlowLayout布局方式的特点? GridLayout布局的特点有哪些?

43 2018/11/11 谢谢


Download ppt "Java语言程序设计-JAVA图形与图像处理"

Similar presentations


Ads by Google