1、 坐标体系 - 介绍
-
坐标原点位于坐上角,以像素为单位,在Java坐标系中,第一个是x 坐标,表示当前位置为水平方向,距离坐标原点x 个像素;
第二个是y 坐标,表示当前位置为垂直方向,距离坐标原点y 个像素
2、坐标体系 - 像素
-
计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的,例如,计算机显示器的分辨率是800 x 600,表示
计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480 000个像素。像素是一个密度单位,
而厘米是一个长度单位,两者无法比较。
3、绘图原理
- Component类提供了两个和绘图相关最重要的方法:
- paint(Graphics g) 绘制组件的外观
- repaint()刷新组件的外观
- 当组件第一次在屏幕显示的时候,程序会自动的调用paint() 方法来绘制组件
- 在一下情况paint() 将会被调用:
- 窗口最小化,在最大化
- 窗口的大小发生变化
- repaint 方法 被调用
package com.hspedu.draw;
import javax.swing.*;
import java.awt.*;
/**
* 显示如何在面板上画圆
*/
@SuppressWarnings({"all"})
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);
//当点击窗口的小叉,程序完全退出
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true); //可以显示
}
}
//1. 先定义一个MyPanel, 继承JPanel 类,画图形,就在面板上画
class MyPanel extends JPanel {
//1. MyPanel 对象就是一个画板
//2. Graphics g 把 g 理解成一支画笔
//3. Graphics 提供了很多绘图的方法
@Override
public void paint(Graphics g) { //绘图方法
super.paint(g); //调用父类的方法完成初始化
System.out.println("paint 方法被调用");
//画出一个圆形
g.drawOval(10,10,100,100);
}
}
4、Graphics类
-
Graphics类你可以理解就是画笔,为我们提供了各种绘制图形的方法
- 画直线 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)
- 画圆片 drawImage(Image img, int x, int y, ..)
- 需要把图片复制到out 文件夹下的该项目
- 画字符串 drawString(String str, int x, int y)
- 设置画笔的字体 setFont(Font font)
- 设置画笔的颜色 set Color(Color c)
//演示绘制不同的图形... g.drawLine(10,10,100,100); g.drawRect(10,10,100,100); //设置画笔的颜色 g.setColor(Color.blue); g.fillRect(10,10,100,100); g.setColor(Color.red); g.fillOval(10,10,100,100); //1.获取图片资源 /bg.jpg 表示在该项目的根目录去获取 bg.jpg 图片资源 Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bg.jpg")); g.drawImage(image,10,10,108,109,this); //画字符串 //给画笔设置颜色和字体 g.setColor(Color.red); g.setFont(new Font("隶书",Font.BOLD,50)); g.drawString("北京你好",100,100); //这里设置的100 , 100 ,是"北京你好"左下角
5、演示键盘控制圆球上下左右移动
package com.hspedu.event_;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/**
* 演示键盘控制圆球上下左右移动
*/
public class BallMove extends JFrame{
MyPanel mp = null;
public static void main(String[] args) {
new BallMove();
}
public BallMove() {
mp = new MyPanel();
this.add(mp);
this.setSize(400,300);
//窗口JFrame 对象可以监听键盘事件,即可以监听到面板发生的键盘事件
this.addKeyListener(mp);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
//KeyListener 是监听器,可以监听键盘事件
class MyPanel extends JPanel implements KeyListener {
//为了让小球可以移动,把他的左上角的坐标设置成变量
int x = 10;
int y = 10;
@Override
public void paint(Graphics g) {
super.paint(g);
g.fillOval(x,y,20,20);
}
//有字符输出时,改方法就会触发
@Override
public void keyTyped(KeyEvent e) {
}
//当某个键按下,该方法会触发
@Override
public void keyPressed(KeyEvent e) {
//System.out.println((char)e.getKeyCode() + "被按下...");
//根据用户按下的不同键,来处理小球的移动(上下左右的键)
//在Java中,会给每一个键,分配一个值(int)
if(e.getKeyCode() == KeyEvent.VK_DOWN) { //KeyEvent.VK_DOWN 就是向下的箭头对应的code
y += 10;
} else if (e.getKeyCode() == KeyEvent.VK_UP) {
y-= 10;
} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
x-=10;
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
x+=10;
}
//让面板重绘
this.repaint();
}
//当某个键释放了,该方法会触发
@Override
public void keyReleased(KeyEvent e) {
}
}
6、Java事件处理机制
- Java事件处理是采取 “委派事件模型” 。当事件发生时,产生事件的对象,会把此 “信息" 传递给 ”事件的监听者“ 处理,这里所说的 ”信息“ 实际上就是 java.awt.event 事件类库里某个类所创建的对象,把它称为 ”事件的对象“。
以上图片来自 韩顺平Java课程
标签:10,KeyEvent,int,大战,paint,100,坦克,public From: https://www.cnblogs.com/muzhe777/p/17121115.html