Java绘图Swing和事件处理机制

发布于:2025-02-25 ⋅ 阅读:(15) ⋅ 点赞:(0)

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();
    }
}

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到