坐标体系介绍
下图说明了Java坐标系。坐标原点位于左上角,以像素为单位。在Java坐标系中,第一
个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当
前位置为垂直方向,距离坐标原点y个像素。
坐标体系-像素
- 绘图还必须要搞清个非常重要的概念像素一个像素等于多少厘米?
- 计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如,计算机显示
器的分辨率是800x 600,表示计算机屏幕上的每一行由800个 点组成,共有600行,
整个计算机屏幕共有480 000个像素。像素是一个密度单位,而厘米是长度单位,两
者无法比较
绘图原理
Component类提供 了两个和绘图相关最重要的方法:
-
paint(Graphics g)绘制组件的外观
-
repaint()刷新组件的外观。
当组件第一次在屏幕显示的时候,程序会 自动的调用paint()方法来绘制组件。
在以下情况paint()将会被调用:
-
窗口最小化,再最大化
-
窗口的大小发生变化
-
repaint函数被调用
Graphics类
Graphics类可以理解就是画笔,为我们提供了各种绘制图形的方法:[可以参考jdk帮助文档]
-
画直线drawLine(int x1 ,int y1,int x2,int y2)
-
画矩形边框drawRect(int x, int y, int width, int height)
-
画椭圆边框drawOval(int x, int y, int width, int height)
-
填充矩形fillRect(int x, int y, int width, int height)
-
填充椭圆fillOval(int x, int y, int width, int height)
-
画图片drawlmage(Image img, int x, int y, .)
-
画字符串drawString(String str, int x, int y)
-
设置画笔的字体setFont(Font font)
-
设置画笔的颜色setColor(Color c)
演示:
package www.xz.draw;
import javax.swing.*;
import java.awt.*;
/**
* @author 许正
* @version 1.0
* 演示如何在面板上画出圆形
*/
public class DrawCircle extends JFrame {//JFrame 对应窗口,可以理解成一个画框
private MyPanel mp = null;//定义面板
public static void main(String[] args) {
new DrawCircle();
}
public DrawCircle() {//构造器
//初始化面板
mp = new MyPanel();
//把面板放入到窗口(画框)
this.add(mp);
//设置窗口大小
this.setSize(400, 300);
//当点击窗口的close时,程序退出
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);//可以显示
}
}
//1.先定义一个MyPaneL,继承JPanel类,画图形,就在面板上画
class MyPanel extends JPanel {
//1. MyPaneL 对象就是一个画板
//2. Graphics g把g理解成一 支画笔
//3. Graphics 提供了很多绘图的方法
//Graphics g
@Override
public void paint(Graphics g) {//绘图方法
super.paint(g);//调用父类的方法完成初始化
// System.out.println("paint()方法被调用...");
//画一个圆形
g.drawOval(10, 10, 100, 100);
//演示绘制不同的图形
// 1. 画直线drawLine(int x1 ,int y1,int x2,int y2)
g.drawLine(10, 10, 100, 100);
// 2. 画矩形边框drawRect(int x, int y, int width, int height)
g.drawRect(10, 10, 50, 50);
// 3. 画椭圆边框drawOval(int x, int y, int width, int height)
// 4. 填充矩形fillRect(int x, int y, int width, int height)
g.setColor(Color.green);
g.fillRect(60, 60, 10, 10);
// 5. 填充椭圆fillOval(int x, int y, int width, int height)
g.setColor(Color.red);
g.fillOval(70, 70, 20, 20);
// 6. 画图片drawImage(Image img, int x, int y, .)
Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/wxxz.jpg"));
g.drawImage(image, 110, 110, 800, 600, this);
// 7. 画字符串drawString(String str, int x, int y)
// 8. 设置画笔的字体setFont(Font font)
// 9. 设置画笔的颜色setColor(Color c)
g.setColor(Color.CYAN);
g.setFont(new Font("宋体", Font.BOLD, 50));
g.drawString("郑州你好!", 200, 200);
}
}
绘出坦克
一些游戏中如坦克大战游戏中,我们会用到坦克,现在我们就利用java绘图技术来画出一个小坦克,完成
我们的坦克大战游戏1.0版本!
java事件处理机制
基本说明
java事件处理是采取"委派事件模型"。当事件发生时,产生事件的对象,会把此"信息"传递
给"事件的监听者”处理,这里所说的"信息"实际上就是java.awt.event事件类库里某个
类所创建的对象,把它称为"事件的对象"
示意图
机制分析
事件处理机制深入理解
-
前面我们提到几个重要的概念事件源,事件,事件监听器我们下面来全面的介绍它们。
-
事件源:事件源是个产生事件的对象, 比如按钮,窗口等。
-
事件:事件就是承载事件源状态改变时的对象,比如当键盘事件、鼠标事件、窗口事件
等等,会生成一个事件对象,该对象保存着当前事件很多信息,比如KeyEvent对象有
含有被按下键的Code值。java.awt.event包 和javax.swing.event包中定义了各种事件类型 -
事件类型:查阅jdk文档
- 事件监听器接口:
- 当事件源产生一个事件,可以传送给事件监听者处理
- 事件监听者实际上就是一个类,该类实现了某个事件监听器接口
比如前面我们案例中的MyPanel就是一个类,它实现了
KeyListener接口,它就可以作为一个事件监听者,对接受到的事件进行处理 - 事件监听器接口有多种,不同的事件监听器接口可以监听不同的
事件一个类可以实现多个监听接口 - 这些接口在java.awt.event包和javax.swing.event包中定义。
列出常用的事件监听器接口,查看jdk文档聚集了.