/**
* 一、项目实战选择坦克大战,涉及知识(温故知新)
* 1.面向对象
* 2.界面编程
* 3.绘图技术
* 4.多线程
* 5.文件I/O操作
* 6.数据库
* 二、Java绘图坐标体系
* 坐标原点位于左上角,以像素为单位,像素是计算机屏幕上最小的显示单位。坐标(x,y)表示水平向右x,竖直向下y。
* 像素:1像素 = ?像素
* 分辨率是800×600,说明有800*600像素。像素的多少决定图像的清晰程度。像素是一个密度单位,厘米是一个长度单位。 (无法比较)
*
* 三、绘图原理
* Component 类提供了两个和绘图相关的最重要的方法:
* 1.paint(Graphics g)绘制组件的外观。
* 2.repaint()刷新组件的外观。
* 当组件第一次在屏幕显示时,程序会自动调用paint()方法来绘制组件。
*
* 注意:以下情况paint()将会被调用。
* 1.窗口最小化再最大化,
* 2.窗口大小发生变化。
* 3.repaint函数被调用。
* 四、Graphics类
* 可以理解为画笔,提供各种绘制图形的方法。(建议查看jdk文档)
* 1.画线:drawLine(int x1,int y1,int x2,int y2);
* 2.画矩形:
* 直角矩形:(1)drawRect(int x,int y,int width,int height)
* 画线框围起来的矩形。其中参数x和y指定左上角的位置,参数width和height是矩形的宽和高。
* (2)fillRect(int x,int y,int width,int height):是用预定的颜色填充一个矩形,得到一个着色的矩形块。
* 画圆角矩形:(1)drawRoundRect(int x,int y,int width, int height, int arcWidth, int arcHeight)
* 是用线围起来的圆角矩形。其中参数x和y指定矩形左上角的位置;参数width和heigth是矩形的宽和高;
* arcWidth和arcHeight分别是圆角弧的横向直径和圆角弧的纵向直径。
* (2)fillRoundRect(int x,int y,int width,int height,int arcWidth,int archeight)
* 是用预定的颜色填充的圆角矩形。各参数的意义同前一个方法。
* 3.画三维矩形:
* (1)draw3DRect(int x,int y,int width,int height, boolean raised)
* 画一个突出显示的矩形。其中x和y指定矩形左上角的位置,参数width和height是矩形的宽和高,参数raised是突出与否。
* (2)fill3DRect(int x,int y,int width,int height,boolean raised):用预定的颜色填充一个突出显示的矩形。
* 4.画圆弧:
* (1)drawArc(int x,int y,int width,int height,int startAngle, int arcAngle)
* 画椭圆一部分的圆弧线。椭圆的中心是它的外接矩形的中心,其中参数是外接矩形的左上角坐标(x,y),宽是width,高是heigh。
* 参数startAngle的单位是“度”,起始角度0度是指3点钟方位.参数startAngle和arcAngle表示从startAngle角度开始,逆时针方向画arcAngle度的弧。
* 约定,正值度数是逆时针方向,负值度数是顺时针方向,例如-90度是6点钟方位。
* (2)fillArc(int x,int y,int width, int height, int startAngle, int arcAngle)
* 用setColor()方法设定的颜色,画着色椭圆的一部分。
* 5.画多边形
* 多边形是用多条线段首尾连接而成的封闭平面图。多边形线段端点的x坐标和y坐标分别存储在两个数组中,画多边形就是按给定的坐标点顺序用直线段将它们连起来。
* (1)drawPolygon(int xpoints[],int yPoints[],int nPoints):画一个多边形
* (2)fillPolygon(int xPoints[],int yPoints[],int nPoints)
* 用方法setColor()设定的颜色着色多边形。其中数组xPoints[]存储x坐标点,yPoints[]存储y坐标点,nPoints是坐标点个数。
* 注意,上述方法并不自动闭合多边形,要画一个闭合的多边形,给出的坐标点的最后一点必须与第一点相同.
* 6.擦除矩形工具
* 当需要在一个着色图形的中间有一个空缺的矩形的情况,可用背景色填充一矩形块实现,相当于在该矩形块上使用了 “橡皮擦”。
* clearRect(int x, int y, int width, int height)
* 7.画字符串
* 使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本。最左侧字符的基线位于此图形上下文坐标系的 (x, y) 位置处。
* drawString(String str, int x, int y)
* 8.绘制图像
* (1)boolean drawImage(Image img, int x, int y, ImageObserver observer)
* (2)boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
* (3)boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer)
* (4)boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer)
* 参数:
* Image img – 需要绘制的图像。
* int x, int y – 图像左上角坐标。
* int width, int height – 图像的宽度和高度。
* Color bgcolor – 背景色,即图像下面的颜色。如果图像包含透明象素时这会有用,图像将在指定颜色背景下显示。
* ImageObserver observer – 一个实现ImageObserver 接口的对象。它将该对象登记为一个图像观察者,因此当图像的任何新信息可见时它被通知。
*
* 大多组件可以简单的指定this。组件可以指定this作为图像观察者的原因是Component 类实现了ImageObserver 接口。
* 当图像数据被加载时它的实现调用repaint方法,这通常是你所期望的。
* drawImage 方法只要要显示的图像数据已经加载完就返回。如果你要确保drawImage只绘制完整的图像,那么你需要跟踪图像的加载。
*
* 一、项目实战选择坦克大战,涉及知识(温故知新)
* 1.面向对象
* 2.界面编程
* 3.绘图技术
* 4.多线程
* 5.文件I/O操作
* 6.数据库
* 二、Java绘图坐标体系
* 坐标原点位于左上角,以像素为单位,像素是计算机屏幕上最小的显示单位。坐标(x,y)表示水平向右x,竖直向下y。
* 像素:1像素 = ?像素
* 分辨率是800×600,说明有800*600像素。像素的多少决定图像的清晰程度。像素是一个密度单位,厘米是一个长度单位。 (无法比较)
*
* 三、绘图原理
* Component 类提供了两个和绘图相关的最重要的方法:
* 1.paint(Graphics g)绘制组件的外观。
* 2.repaint()刷新组件的外观。
* 当组件第一次在屏幕显示时,程序会自动调用paint()方法来绘制组件。
*
* 注意:以下情况paint()将会被调用。
* 1.窗口最小化再最大化,
* 2.窗口大小发生变化。
* 3.repaint函数被调用。
* 四、Graphics类
* 可以理解为画笔,提供各种绘制图形的方法。(建议查看jdk文档)
* 1.画线:drawLine(int x1,int y1,int x2,int y2);
* 2.画矩形:
* 直角矩形:(1)drawRect(int x,int y,int width,int height)
* 画线框围起来的矩形。其中参数x和y指定左上角的位置,参数width和height是矩形的宽和高。
* (2)fillRect(int x,int y,int width,int height):是用预定的颜色填充一个矩形,得到一个着色的矩形块。
* 画圆角矩形:(1)drawRoundRect(int x,int y,int width, int height, int arcWidth, int arcHeight)
* 是用线围起来的圆角矩形。其中参数x和y指定矩形左上角的位置;参数width和heigth是矩形的宽和高;
* arcWidth和arcHeight分别是圆角弧的横向直径和圆角弧的纵向直径。
* (2)fillRoundRect(int x,int y,int width,int height,int arcWidth,int archeight)
* 是用预定的颜色填充的圆角矩形。各参数的意义同前一个方法。
* 3.画三维矩形:
* (1)draw3DRect(int x,int y,int width,int height, boolean raised)
* 画一个突出显示的矩形。其中x和y指定矩形左上角的位置,参数width和height是矩形的宽和高,参数raised是突出与否。
* (2)fill3DRect(int x,int y,int width,int height,boolean raised):用预定的颜色填充一个突出显示的矩形。
* 4.画圆弧:
* (1)drawArc(int x,int y,int width,int height,int startAngle, int arcAngle)
* 画椭圆一部分的圆弧线。椭圆的中心是它的外接矩形的中心,其中参数是外接矩形的左上角坐标(x,y),宽是width,高是heigh。
* 参数startAngle的单位是“度”,起始角度0度是指3点钟方位.参数startAngle和arcAngle表示从startAngle角度开始,逆时针方向画arcAngle度的弧。
* 约定,正值度数是逆时针方向,负值度数是顺时针方向,例如-90度是6点钟方位。
* (2)fillArc(int x,int y,int width, int height, int startAngle, int arcAngle)
* 用setColor()方法设定的颜色,画着色椭圆的一部分。
* 5.画多边形
* 多边形是用多条线段首尾连接而成的封闭平面图。多边形线段端点的x坐标和y坐标分别存储在两个数组中,画多边形就是按给定的坐标点顺序用直线段将它们连起来。
* (1)drawPolygon(int xpoints[],int yPoints[],int nPoints):画一个多边形
* (2)fillPolygon(int xPoints[],int yPoints[],int nPoints)
* 用方法setColor()设定的颜色着色多边形。其中数组xPoints[]存储x坐标点,yPoints[]存储y坐标点,nPoints是坐标点个数。
* 注意,上述方法并不自动闭合多边形,要画一个闭合的多边形,给出的坐标点的最后一点必须与第一点相同.
* 6.擦除矩形工具
* 当需要在一个着色图形的中间有一个空缺的矩形的情况,可用背景色填充一矩形块实现,相当于在该矩形块上使用了 “橡皮擦”。
* clearRect(int x, int y, int width, int height)
* 7.画字符串
* 使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本。最左侧字符的基线位于此图形上下文坐标系的 (x, y) 位置处。
* drawString(String str, int x, int y)
* 8.绘制图像
* (1)boolean drawImage(Image img, int x, int y, ImageObserver observer)
* (2)boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
* (3)boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer)
* (4)boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer)
* 参数:
* Image img – 需要绘制的图像。
* int x, int y – 图像左上角坐标。
* int width, int height – 图像的宽度和高度。
* Color bgcolor – 背景色,即图像下面的颜色。如果图像包含透明象素时这会有用,图像将在指定颜色背景下显示。
* ImageObserver observer – 一个实现ImageObserver 接口的对象。它将该对象登记为一个图像观察者,因此当图像的任何新信息可见时它被通知。
*
* 大多组件可以简单的指定this。组件可以指定this作为图像观察者的原因是Component 类实现了ImageObserver 接口。
* 当图像数据被加载时它的实现调用repaint方法,这通常是你所期望的。
* drawImage 方法只要要显示的图像数据已经加载完就返回。如果你要确保drawImage只绘制完整的图像,那么你需要跟踪图像的加载。
*
*/
package com.shuiyixin1; import java.awt.*; import javax.swing.*; public class learnJ_011tuxing4 extends JFrame{ /** * @作者:shuiyixin * @日期:2018.02.21 * @内容:java绘图,事件处理机制 */ MyPanel mp;//MyPanel实例对象 public static void main(String[] args){ learnJ_011tuxing4 lt = new learnJ_011tuxing4(); lt.Fun1(); } public void Fun1(){ mp = new MyPanel(); this.add(mp); this.setSize(510,550); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } //定义一个MyPanel类,(我自己的面板,用于绘图和实现绘图的区域) class MyPanel extends JPanel{ //覆盖JPanel中的paint方法,Graphics是绘图技术的重要类,可以理解为一只画笔。该方法会自动调用。 public void paint (Graphics g){ //调用父类函数,完成初始化,注意这句话不能少 super.paint(g); //画(椭)圆 g.drawOval(x, y, width, height); //g.drawOval(50, 50, 30, 30);//圆 //g.drawOval(100, 100, 30, 40);//椭圆 //画直线 g.drawLine(x1, y1, x2, y2); //g.drawLine(1, 1, 30, 300); //画矩形 g.drawRect(x, y, width, height) //g.drawRect(20, 20, 200, 100); //填充矩形 //g.setColor(Color.BLUE); //g.fillRect(200, 200, 10, 30); //圆角矩形 //g.drawRoundRect(20, 10, 300, 200, 20, 30); //填充圆角矩形 //g.fillRoundRect(30, 20, 15, 10, 2, 3); g.setColor(Color.red); g.draw3DRect(80,100,40,25,true); // 画一个3D矩形线框 g.setColor(Color.yellow); g.fill3DRect(20,70,20,30,true); // 画一个3D矩形着色块 g.drawArc(10,40,90,50,0,180); // 画圆弧线 g.drawArc(100,40,90,50,180,180); // 画圆弧线 g.setColor(Color.yellow); g.fillArc(10,100,40,40,0,-270); // 填充缺右上角的四分之三的椭圆 g.setColor(Color.green); g.fillArc(60,110,110,60,-90,-270); // 填充缺左下角的四分之三的椭圆 //多边形 int px1[]={50,90,10,20}; int py1[]={10,50,50,20}; int px2[]={140,180,170,180,140,100,110,140}; int py2[]={5,25,35,45,65,35,51,5}; g.setColor(Color.blue); g.fillPolygon(px1,py1,4); g.setColor(Color.red); g.drawPolygon(px2,py2,8); //两种载入图像的方式 Image im = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/lizhi.png")); g.drawImage(im, 0, 0, 510, 255, this); Image im1 = Toolkit.getDefaultToolkit().getImage("images/lizhi.png"); g.drawImage(im1, 0, 255, 510, 255, this); g.setColor(Color.GREEN); g.setFont(new Font("楷体", Font.BOLD, 40)); g.drawString("励志语录", 0, 240); //通过使用当前绘图表面的背景色进行填充来清除指定的矩形。 g.clearRect(40,40,40,55); } } }代码实现效果如下: