JAVA绘图技术

坐标体系

坐标原点位于左上角,以像素为单位,像素是计算机屏幕上最小的显示单位,在java的坐标系中,第一个是x坐标,表示当前位置位水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置位垂直方向,距离坐标点y个像素。

绘图原理

Component类提供了两个绘图相关最要的方法:

  Ⅰ.paint(Graphics g)绘制组件的外观 (当组件第一次在屏幕显示的时候,程序会自动调用paint函数)

  Ⅱ.repaint()刷新组件的外观。

在以下情况paint()将会被调用:

  Ⅰ.窗口最小化,再最大化

  Ⅱ.窗口的大小发生变化

  Ⅲ.repaint函数被调用

 1 /*
 2  * 作者:白客C
 3  * 时间:2020年03月07日
 4  * 内容:绘图原理
 5  */
 6
 7 package com.beekc.www;
 8 import java.awt.*;
 9 import javax.swing.*;
10
11 //继承JFanme
12 public class Beekc extends JFrame{
13
14     //定义组件
15     MyPanle myPanle;
16     public static void main(String[] args){
17         Beekc beekc =new Beekc();
18     }
19
20     //构造函数
21     public Beekc(){
22         //创建组件
23         myPanle = new MyPanle();
24
25         //设置布局管理器
26
27         //添加组件
28         this.add(myPanle);
29
30         //设置窗体
31         this.setTitle("绘图技术");
32         this.setSize(400,300);
33         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
34
35         //显示
36         this.setVisible(true);
37     }
38
39 }
40
41 //定义一个自己的面板,用于绘图和实现绘图的区域
42 class MyPanle extends JPanel
43 {
44     //覆盖JPanel的paint方法
45     //Graphicss绘图必备类,可以把它当成画笔
46     public void paint(Graphics g)
47     {
48         //调用父类完成初始化
49         super.paint(g);
50         //画出一个(椭)圆
51         g.drawOval(10,10,50,50);
52         //画出直线
53         g.drawLine(80,20,130,50);
54         //画出矩形框
55         g.drawRect(160,15,50,40);
56         //画出填充矩形
57         g.fillRect(240,15,50,40);
58         //画出填充矩形并换颜色
59         g.setColor(Color.BLUE);
60         g.fillRect(310,15,50,40);
61         //画出填充(椭)圆
62         g.setColor(Color.GRAY);
63         g.fillOval(10,80,50,50);
64
65         //画图片
66         //Image im = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/qq_bg.jpg"));
67         //实现图片
68         //g.drawImage(im,150,150,200,150,this);
69
70         //画图片
71         Image im = Toolkit.getDefaultToolkit().getImage("qq_bg.jpg");
72         //实现图片
73         g.drawImage(im,80,130,150,90,this);
74
75         //画字体
76         g.setColor(Color.red);
77         g.setFont(new Font("华文彩云",Font.BOLD,30));
78         g.drawString("中国万岁",90,110);
79
80     }
81 }

绘图坦克实例

  1 /*
  2  * 作者:白客C
  3  * 时间:2019年03月08日
  4  * 功能:坦克游戏
  5  * 版本:1.0
  6  */
  7 package com.beekc.www;
  8 import java.awt.*;
  9 import javax.swing.*;
 10
 11 //继承JFrame
 12 public class TankGame extends JFrame{
 13
 14     //定义组件
 15     MyPanel mp = null;
 16
 17     public static void main(String[] args) {
 18         TankGame tankGame = new TankGame();
 19     }
 20
 21     //构造函数
 22     public TankGame(){
 23
 24         //创建组件
 25         mp = new MyPanel();
 26
 27         //添加组件
 28         this.add(mp);
 29
 30         //设置窗体
 31         this.setTitle("坦克大战");
 32         this.setSize(400,300);
 33         this.setLocation(200,200);
 34         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 35
 36         //显示
 37         this.setVisible(true);
 38     }
 39
 40 }
 41
 42 //我的面板
 43 class MyPanel extends JPanel
 44 {
 45     //定义一个我的坦克
 46     Hero hero = null;
 47
 48     //构造函数
 49     public MyPanel()
 50     {
 51         hero = new Hero(100,100);
 52     }
 53     @Override
 54     //覆盖paint
 55     public void paint(Graphics g) {
 56         //画笔
 57         super.paint(g);
 58         //画出活动区域
 59         g.fillRect(0,0,400,300);
 60         //画出我的坦克
 61         this.drawTank(hero.getX(),hero.getY(), g,0,0);
 62     }
 63
 64     //画出坦克的函数
 65     /*
 66      *x,y <--> 坐标
 67      *g <--> 画笔
 68      *direct <--> 方向
 69      * type <--> 类型
 70      */
 71     public void drawTank(int x, int y, Graphics g, int direct, int type)
 72     {
 73         //判断坦克类型
 74         switch (type)
 75         {
 76             case 0:
 77                 g.setColor(Color.CYAN);
 78                 break;
 79             case 1:
 80                 g.setColor(Color.yellow);
 81                 break;
 82         }
 83
 84         //判断方向
 85         switch (direct)
 86         {
 87             //向上
 88             case 0:
 89                 //画出左边矩形
 90                 g.fill3DRect(x,y,5,30,false);
 91                 //画出有边矩形
 92                 g.fill3DRect(x+15,y,5,30,false);
 93                 //画出中间矩形
 94                 g.fill3DRect(x+5,y+5,10,20,false);
 95                 //画出圆
 96                 g.fillOval(x+4,y+10,10,10);
 97                 //画出线
 98                 g.drawLine(x+9,y+15,x+9,y);
 99                 break;
100              //
101             case 1:
102
103         }
104     }
105 }
106
107 //坦克类
108 class Tank
109 {
110     //坦克的横坐标
111     int x = 0;
112     //坦克的纵坐标
113     int y = 0;
114
115     //构造函数
116     public Tank(int x ,int y){
117         this.x = x;
118         this.y = y;
119     }
120
121     public int getX() {
122         return x;
123     }
124
125     public void setX(int x) {
126         this.x = x;
127     }
128
129     public int getY() {
130         return y;
131     }
132
133     public void setY(int y) {
134         this.y = y;
135     }
136 }
137
138 //我的坦克
139 class Hero extends Tank
140 {
141     //构造函数
142     public Hero(int x, int y) {
143         //通过super来调用父类其他重载的构造方法
144         super(x, y);
145     }
146 }

原文地址:https://www.cnblogs.com/beekc/p/12439613.html

时间: 2024-10-10 00:14:38

JAVA绘图技术的相关文章

Java绘图技术基础

1 public class Demo1 extends JFrame{ 2 MyPanel mp=null; 3 4 public static void main(String[] args){ 5 Demo1 demo=new Demo1(); 6 } 7 8 public Demo1(){ 9 mp=new MyPanel(); 10 this.add(mp); 11 this.setSize(400,300); 12 this.setDefaultCloseOperation(JFra

JAVA入门到精通-第33讲-绘图技术.坦克大战1

    用的是Access数据库,安全性不够好,性能也不够强大:   躲在这里,坦克很少过来,做了一个随机数: 把得分的记录保存在数据库里面: SQLServer2005中型数据库:    (x,y)坐标:     800x600:     表示计算机屏幕上的每一行由800个点组成,共有600行:   共有480000个像素:   java绘图技术:   绘图一般在JPane上画: 覆盖JPanel的paintat方法 Graphics是一个图形画笔类,绘图的重要类,可以理解为一只画笔 supe

java基础 绘图技术.坦克大战 之java绘图坐标体系(一)

坐标体系介绍 下图说明了java坐标体系.坐标原点位于左上角,以像素为单位,像素是计算机屏幕上最小的显示单位.在java的坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素:第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素. 绘图还必须要搞清楚一个非常重要的概念,像素: 计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成.例如,计算机显示器的分辨率是800*600,表示计算机屏幕上的每一行由800个点组成,共600行,整个计算机屏幕共有480 000个像素.现在

(转)java缓存技术,记录

http://blog.csdn.net/madun/article/details/8569860 最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/articles/cache-static-files-with-jnotify-and-ehcache 介绍 JNotify:http://jnotify.sourceforge.net/,通过JNI

浅谈Java分页技术

话不多言.我们要实现java分页技术,我们首先就需要定义四个变量,他们是: int  pageSize;//每页显示多少条记录 int pageNow;//希望现实第几页 int pageCount;//一共有多少页 int rowCount;//一共有多少条记录 说明: 1.pageSize是指定的 2.pageNow是用户选择的 3.rowCount是从表中查询得到的 4.pageCount是计算得到的,该计算为: if(rowCount%pageSize==0) { pageCount=r

黑马程序员 ---------- Java网络技术之 ---正则表达式 (Day06)

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 正则表达式 正则表达式:基本知识 1  字符,   2 字符类 , 3 预定义字符类 , 4 边界匹配器 ,5 Greedy 数量词,6 Logical 运算符 详解: 1 字符 x   字符 x \\ 反斜线字符 \0n 带有八进制值 0 的字符 n (0 <= n <= 7) \0nn 带有八进制值 0 的字符 nn (0 <= n

Java Web技术总结(目录)

来源于:http://www.jianshu.com/p/539bdb7d6cfa Java Web技术经验总结(一) Java Web技术经验总结(二) Java Web技术经验总结(三) Java Web技术经验总结(四) Java Web技术经验总结(五) Java Web技术经验总结(六) Java Web技术经验总结(七) Java Web技术经验总结(八) Java Web技术经验总结(九) Java Web技术经验总结(十) Java Web技术经验总结(十一) 文/杜琪(简书作者

PHP 绘图技术

1.图片格式:目前网站开发常见的图片格式有gif,jpg/jpeg,png ..... 区别: gif 图片压缩率高,但是只能显示256色,可能造成颜色的丢失,可以显示动画 jpg/jpeg 图片压缩率高(有损压缩),可以用较小的文件来显示,网页上用得比较多 png 该格式综合了gif和jpg的优势,缺点是不能显示动画 2.通过PHP编程来绘图 <?php $width=800; $height=600; //绘图技术 基本步骤 前提:在php.ini文件中启用gd库 //创建画布 默认背景是黑

Java分布式应用技术架构介绍

分布式架构的演进 系统架构演化历程-初始阶段架构 初始阶段 的小型系统 应用程序.数据库.文件等所有的资源都在一台服务器上通俗称为LAMP 特征: 应用程序.数据库.文件等所有的资源都在一台服务器上. 描述: 通常服务器操作系统使用linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用Mysql,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了. 系统架构演化历程-应用服务和数据服务分离 好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰