java学习(20)图形用户界面(4)

/**
 * 一、项目实战选择坦克大战,涉及知识(温故知新)
 *    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);
		}
	}
}
代码实现效果如下:


猜你喜欢

转载自blog.csdn.net/shuiyixin/article/details/79344657