第一讲Java画图机制
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
改变画笔颜色
Graphics类默认的画笔颜色是黑色,我们可以调用该 类提供的方法改变画笔颜色,画出五颜六色的图像,改 变画笔颜色的方法是setColor()方法,该方法的格式如 下所示:
public void setColor(java.awt.Color color); 该方法只有一个参数,参数类型是Color,Color是一 个颜色类,通过RGP数值进行定义,当然对于常用的一 些颜色如红黄蓝等等,Color提供了一些静态对象与之 对应:
思考
这段代码改动不大,仅仅定义了变量x和y ,作为矩形的左上角坐标。现在可以思考一 下,如果在程序运行过程中动态的改变x和 y的值,是不是可以改变矩形的位置?
例9 使用事件机制控制移动
package demo; import java.awt.*; import java.awt.event.*; public class MyCanvas_9 extends Frame { public MyCanvas_9()
frm.setSize(600,400); frm.setVisible(true); } }
绘制三角形和多边形
绘制多边形和填充多边形的方法分别是drawPolygon () 方法和fillPolygon()方法,其中英文单词Polygon的意思 是多边形的意思。两个方法的定义如下所示:
public void drawPolygon(int [] xs, int [] ys, int lineNumber);
int x=100,y=100; public void paint(Graphics g) { //设置颜色为蓝色
g.setColor(Color.blue); //用x和y的值来指定矩形左上角坐标 g.fillRect(x,y,50,50); } public static void main(String[] args) { MyCanvas_8 mc=new MyCanvas_8(); mc.setSize(600,400); mc.show(); } }
public void paint(Graphics g) { //设置画笔颜色为蓝色
g.setColor(Color.blue); //填充一个矩形 g.fillRect(100,150,300,200); //设置画笔颜色为红色 g.setColor(Color.red); //绘制矩形边框 g.drawRect(100,150,300,200); } public static void main(String[] args) { MyCanvas_4 frm=new MyCanvas_4(); frm.setSize(600,400); frm.setVisible(true); } }
import java.awt.*; public class MyCanvas_3 extends Frame { //具体的画图方法,覆盖了父类中的同名方法
public void paint(Graphics g) { //对象g相当于画笔
//画图的默认颜色是黑色 //fillRect()是对象g的成员方法,填充一个矩形 //矩形的左上角坐标是(100,150) //宽300,高200 //原点位于窗口的左上角 g.fillRect(100,150,300,200); } public static void main(String[] args) { MyCanvas_3 frm=new MyCanvas_3(); frm.setSize(600,400); frm.setVisible(true); } }
例7 绘制三角形和多边形
import java.awt.*; public class MyCanvas_7 extends Frame { //具体的画图方法,覆盖了父类中的同名方法
public void paint(Graphics g) { g.setColor(Color.blue);
int []xs={60,150,170}; int []ys={60,50,150}; g.drawPolygon(xs,ys,3); g.setColor(Color.red); int []xs2={200,300,350,300,200}; int []ys2={200,200,250,300,240}; g.fillPolygon(xs2,ys2,5); } public static void main(String[] args) { MyCanvas_7 frm=new MyCanvas_7(); frm.setSize(600,400); frm.setVisible(true); } }
绘制椭圆形和圆形
画矩形和填充矩形的方法分别是drawRect()和 fillRect() 画椭圆形和填充椭圆形的方法分别是drawOval()和 fillOval()
其中Oval表示椭圆 圆形可以看成是短轴和长轴相等的特殊椭圆形。 drawOval()和fillOval()都是Graphics类的成员
import java.awt.*; public class MyCanvas_2 extends Frame { //具体的画图方法,覆盖了父类中的同名方法
public void paint(Graphics g) { //对象g相当于画笔
//画图的默认颜色是黑色 //drawRect()是对象g的成员方法,绘制一个矩形 //矩形的左上角坐标是(100,150) //宽300,高200 //原点位于窗口的左上角 g.drawRect(100,150,300,200); } public static void main(String[] args) { MyCanvas_2 frm=new MyCanvas_2(); frm.setSize(600,400); frm.setVisible(true); } }
public MyCanvas_1(){} public static void main(String[] args) {
MyCanvas_1 frm=new MyCanvas_1(); frm.setSize(600,400); frm.setVisible(true); } }
例2 在窗体中绘图—画出一个矩形
public void fillPolygon(int [] xs, int [] ys, int lineNumber);
方法有三个参数,其中xs和ys是两个整型数组,分别 表示多边形所有点的x轴坐标和y轴坐标,xs的元素和 ys的元素一一对应,比如xs[0]和ys[0]对应,xs[i] 和ys[i]对应;第三个参数lineNumber表示多边形点 的数量。三角形是一个特殊的多边形。
结果分析
原点坐标 坐标(100,150) 高200 宽300
关于paint()方法
paint()方法的调用是由系统自动完成了。 当Frame窗体显示或被激活的时候,系统就 自动调用该方法进行绘图。 我们编程人员就不必关心paint()方法调用的 细节问题。 专注于paint()方法内部绘图逻辑的实现就可 以了,这是面向对象的好处之一。
例5 绘制矩形和椭圆
import java.awt.*; public class MyCanvas_5 extends Frame { //具体的画图方法,覆盖了父类中的同名方法
public void paint(Graphics g) { //设置画笔颜色为红色
g.setColor(Color.red); //绘制一个矩形边框 g.drawRect(100,150,300,200); //设置画笔颜色为蓝色 g.setColor(Color.blue); //绘制一个椭圆 g.drawOval(100,150,300,200); } public static void main(String[] args) { MyCanvas_5 frm=new MyCanvas_5(); frm.setSize(600,400); frm.setVisible(true); } }
方法,两个方法的格式如下所示:
public void drawOval(int x,int y,int width,int height);
public void fillOval(int x,int y,int width,int height);
其中(x, y)表示椭圆外接矩形的左上角坐标,width 和height分别表示外接矩形的宽和高
{ class KeyEve implements KeyListener { public void keyTyped(KeyEvent e) { //通过e.getKeyChar();得到当前的按键 char key=e.getKeyChar(); if(key=='a') x--;//向左移动 else if(key=='d') x++;//向右移动 else if(key=='w') y--;//向上移动 else if(key=='s') y++;//向下移动 //x和y变动以后,重新绘制窗体 repaint(); } public void keyPressed(KeyEvent e){} public void keyReleased(KeyEvent e){} } addKeyListener(new KeyEve());
Java画图与事件机制
而从游戏的角度出发,绘制静态图形不是我 们的最终目的,游戏的一个特点是交互性很 强,玩家可以通过操作鼠标或键盘控制图形 的变化(图形移动、图形变形等等),以此 来表达游戏逻辑和游戏可玩性。而Java语言 对于鼠标、键盘等外设的控制是通过事件机 制实现的
例8 控制图形移动
package demo; import java.awt.*; public class MyCanvas_8 extends Frame { //定义变量x和y,为矩形的左上角坐标
例6 绘制线段
import java.awt.*; public class MyCanvas_6 extends Frame { //具体的画图方法,覆盖了父类中的同名方法
public void paint(Graphics g) { g.setColor(Color.red);
g.drawLine(100,100,200,200); } public static void main(String[] args) { MyCanvas_6 frm=new MyCanvas_6();
运行效果(内接圆和外接矩形)
绘制线段
绘制线段的方法是drawLine()方法,线段不 能填充,因此没有对应的fillLine()方法。 drawLine()方法的定义如下所示:
public void drawLine(int x1,int y1,int x2,int y2);
其中(x1, y1)、(x2, y2)分别对应线段的两个端 点,画笔颜色对线段的绘制也起作用
paint()的所在类
—Frame
—Window —Container ~ paint()
paint()方法存在于Container类中 Frame多层继承了Contianer 自定义的paint()方法“覆盖了”Contianer中的
paint()方法 paint()方法由窗体自动调用
例3 填充矩形
介绍Java画图的方法与技术,具体包括Java画 图基础知识;重点介绍使用Java语言进行二维图形的 绘制,包括椭圆、矩形、多边形和线段等图形。
1
本讲概要
Java画图基础 事件机制和画图机制 线程机制和画图机制
本讲重点: 掌握Java画图机制基本概念与应用
例1 一个简单的awt窗体代码
import java.awt.*; public class MyCanvas_1 extends Frame { //无参的构造方法
Color.RED:红色对象 Color.BLUE:蓝色对象 .YELLOW:黄色对象 Color.BLACK:黑色对象
.......
例4 改变画笔颜色的代码
import java.awt.*; public class MyCanvas_4 extends Frame { //具体的画图方法,覆盖了父类中的同名方法