java 绘图坐标体系
坐标体系-介绍
坐标体系-像素
“像素是衡量图像分辨率的单位,像素点越多,图像越清晰,细节越多,但图像文件可能不一定小;像素点越少,图像细节越少,看起来可能模糊一些,但图像尺寸(显示大小)与实际像素点多少不直接相关,而是取决于显示设备的分辨率和图像的缩放设置。”
简单来说,像素多意味着图像信息丰富、清晰,而像素少则图像可能模糊,但图像的大小(显示尺寸)与像素数量没有必然联系。
绘图原理
简单案例
package 绘图;
import javax.swing.*;
import java.awt.*;
/**
* @Author: 韩如意
* @CreateTime: 2025-02-24
* @Description: no
* @Version: 1.0
*/
public class DrawCircle extends JFrame { //可以理解成JFrame对应一个窗口,是一个画框
//定义一个画板
private MyPanel mp = null;
public static void main(String[] args) {
new DrawCircle();
System.out.println("退出程序。。。。。");
}
public DrawCircle() {//构造器
//初始化面板
mp = new MyPanel();
//把面板放入到窗口(画框)
this.add(mp);
//设置窗口的大小
this.setSize(400, 300);
this.setVisible(true);//可以显示。 当第一次可视化的时候,会自动调用paint()方法
//当点击窗口的小×,程序完全退出.
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// }
}
// 1. 先定义一个面板MyPanel,继承JPanel类,画图形,就在面板上画
class MyPanel extends JPanel {
//说明:MyPanel 对象就是一个画板 Graphics g,把g理解成一只画笔 Graphics类提供了很多绘图方法
@Override
public void paint(Graphics g) { //绘图方法
super.paint(g); //调用父类的方法完成初始化
System.out.println("paint()方法被调用了。。。");
//画出一个圆形
g.drawOval(10, 10, 200, 200);
}
}
}
绘图方法
案例演示
package 绘图;
import javax.swing.*;
import java.awt.*;
/**
* @Author: 韩如意
* @CreateTime: 2025-02-24
* @Description: no
* @Version: 1.0
*/
public class DrawCircle extends JFrame { //可以理解成JFrame对应一个窗口,是一个画框
//定义一个画板
private MyPanel mp = null;
public static void main(String[] args) {
new DrawCircle();
System.out.println("退出程序。。。。。");
}
public DrawCircle() {//构造器
//初始化面板
mp = new MyPanel();
//把面板放入到窗口(画框)
this.add(mp);
//设置窗口的大小
this.setSize(400, 300);
this.setVisible(true);//可以显示。 当第一次可视化的时候,会自动调用paint()方法
//当点击窗口的小×,程序完全退出.
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// }
}
// 1. 先定义一个面板MyPanel,继承JPanel类,画图形,就在面板上画
class MyPanel extends JPanel {
//说明:MyPanel 对象就是一个画板 Graphics g,把g理解成一只画笔 Graphics类提供了很多绘图方法
@Override
public void paint(Graphics g) { //绘图方法
super.paint(g); //调用父类的方法完成初始化
System.out.println("paint()方法被调用了。。。");
//画出一个圆形
//g.drawOval(10, 10, 100, 100);
//演示绘制不同的图形
//1. 画直线
g.drawLine(10,10,100,100);
//2. 画矩形边框
g.drawRect(10,10,100,100);
//3. 填充矩形
//设置画笔的颜色
g.setColor(Color.pink);
//设置字体
g.setFont(new Font("隶书", Font.BOLD, 50));
g.fillRect(10,10,100,100);
//4. 画图片
// 先获取图片资源 ,在项目的根目录下去获取R-C.jpg图片资源
// Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/R-C.jpg"));
// g.drawImage(image,10,10,100,100,this);
//5. 写字。
// 这里设置的 100, 100, 是 "北京你好"左下角
g.drawString("北京你好", 100, 100);
}
}
}
java 事件处理机制
基本说明
示意图
深入理解
简单案例
package 绘图;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/**
* @Author: 韩如意
* @CreateTime: 2025-02-24
* @Description: 演示小球通过键盘控制上下左右移动----------》Java事件控制
* @Version: 1.0
*/
public class BallMove extends JFrame {
Mypain mp = null;
public static void main(String[] args) {
BallMove ballMove = new BallMove();
}
public BallMove() {
mp = new Mypain();
this.add(mp);
this.setVisible(true);
this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.addKeyListener(mp);
}
}
//面板
//KeyListener 是监听器,可以监听键盘事件
class Mypain extends JPanel implements KeyListener {
//为了让小球移动,可以把他的左上角的坐标(x,y)设置成变量
int x;
int y;
@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) {
}
//当某个键释放(松开),该方法会触发
@Override
public void keyReleased(KeyEvent e) {
// System.out.println((char) e.getKeyCode()+"被按下");
//根据用户按下的不同键来处理小球的移动
if (e.getKeyCode() == KeyEvent.VK_DOWN) { //KeyEvent.VK_DOWN表示向下的箭头对应的code
y++;
}else if (e.getKeyCode() == KeyEvent.VK_UP) {
y--;
}else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
x--;
}else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
x++;
}
//让面板重绘制
this.repaint();
}
}