java绘图技术.Graphics类,监听机制的一些笔记

文章介绍了Java中如何使用Graphics类在Panel上进行图形绘制,包括画圆、矩形、填充等操作,并展示了如何设置画笔颜色和字体。此外,还讲解了如何通过实现KeyListener接口监听键盘事件,控制小球在窗口中的移动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.java绘图技术(Panel面板,画板,paint油漆,Graphics绘图,Frame框架),绘图原理 Component类提供 了两个和绘图相关最重要的方法:

        1.paint(Graphics g)绘制组件的外观

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

当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件。在以下情况paint()将会被调用:

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

        2.窗口的大小发生变化

        3.repaint函数被调用

import javax.swing.*;
import java.awt.*;
@SuppressWarnings({"all"})
//@author 靳嘉豪
//creates 2023-04-12-14:34
//演示如何在面板上画出图形
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 提供了很多绘图方法
    Graphics g
     */
    @Override
    public void paint(Graphics g) {//绘图方法
        super.paint(g);//调用父类的方法完成初始化
        // 画一个圆形
        g.drawOval(10, 10, 300, 200);
    }
}

2.Graphics类,Graphics类你可以理解就是画笔,为我们提供了各种绘制图形的方法:[参考jdk帮助文档]

    1. 1.画直线drawLine(int x1,int y1,int x2,int y2)
    2. 2.画矩形边框drawRect(int X, int y, int width, int height)
    3. 3.画椭圆边框drawOval(int x, int y, int width, int height)
    4. 4.填充矩形fillRect(int x, int y, int width, int height)//设置画笔颜色比如g.setColor(Color.blue);然后再fillRect(10,10,200,200);
    5. 5.填充椭圆fillOval(int x, int y, int width, int height)
    6. 6.画图片drawlmage(lmage img, int x, int y, ..)//看p527的第八分钟
public void paint(Graphics g) {//绘图方法
    super.paint(g);//调用父类的方法完成初始化
    Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/"));
    //这就是一个模板,/后面加上图片的地址,这个图片先保存到out里面这个文件里面(右键粘贴那个)
            g.drawImage(image,,,,,this);//写上x,y,宽高,this则表示是这个图片的
}
    1. 7.画字符串drawString(String str, int x, int y)
    2. 8.设置画笔的字体setFont(Font font),设置画笔的颜色setColor(Color c)
g.setColor(Color.magenta);
g.setFont(new Font("",Font.BOLD,50));
g.drawString("北京你好",100,100);

3.java监听机制

在我们写完JPanel implements KeyListener,标识到KeyListener上ait+回车进行实现方法

当我们产生一个键盘事件被KeyListener监听到,被监听到会产生一个KeyEvent的对象,这个就是事件对象

package com.hspedu.event;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

//@author 靳嘉豪
//creates 2023-04-13-17:05
//演示小球通过键盘控制上下左右移动来讲解java的事件控制
public class BallMove extends JFrame {//继承JFame窗口
    MyPanel mp = null;

    public static void main(String[] args) {
        BallMove ballMove = new BallMove();
    }
    public BallMove() {
        mp = new MyPanel();
        this.add(mp);
        this.setSize(400, 300);
        this.addKeyListener(mp);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}
//面板可以画小球(正因为BallMove extends JFrame,这样画板才能放在JFRAMEDE 的窗口中)
//KeyListener是监听器,来进行监听键盘事件
class MyPanel extends JPanel implements KeyListener {
    // 为了小球可以移动,把他左上角的坐标(x,y)设置为变量
    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+=2;
        }else if(e.getKeyCode() == KeyEvent.VK_UP){
            y-=2;
        }else if(e.getKeyCode() == KeyEvent.VK_RIGHT){
            x+=2;
        }else if(e.getKeyCode() == KeyEvent.VK_LEFT){
            x-=2;
        }
        this.repaint();
    }
    //当某个键释放(松开),该方法会触发
    @Override
    public void keyReleased(KeyEvent e) {
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值