本文共 5250 字,大约阅读时间需要 17 分钟。
/** * 一、项目实战选择坦克大战,涉及知识(温故知新) * 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); } }}代码实现效果如下: