Java自学笔记——绘图入门

这篇博客介绍了Java自学过程中的绘图入门,包括如何定义面板、创建窗口、进行绘制以及处理事件。通过创建面板和窗口类,利用Java实现图形绘制,并讨论了自动调用绘制方法的情况以及如何添加键盘监听。

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

Java自学笔记——绘图入门

面板

  • 定义面板类,绘图在面板上绘制,继承JPanel
  • 画笔Graphics g, 用于在面板上绘制图形
//1.定义面板MyPanel , 继承JPanel类 , JPanel对应面板 , 图形在面板上绘制
class MyPanel extends JPanel {


    //2.画笔 Graphics g , 用于在面板上绘制图形
    @Override
    public void paint(Graphics g) {
        //调用父类方法完成初始化,必须保留
        super.paint(g);
        //画圆
        g.drawOval(10, 10, 100, 100);
    }

}

窗口

自定义窗口类,继承JFrame类,面板要放置在窗口上

//3.定义窗口DrawFrame , 继承JFrame类 , JFrame对应窗口 , 相当于一个画框 , 面板置于窗口上
class DrawFrame extends JFrame{
    //实例化空面板
    private MyPanel mp = null;

    //构造函数 , 初始化窗口
    public DrawFrame(){
        //初始化面板
        mp = new MyPanel();

        //从JFrame类继承的方法,对窗口进行初始化
        this.add(mp);
        this.setSize(400, 300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }

}

绘制

在main方法里创建一个窗口对象,即可实现绘制

/**
 * @author Lspero
 * @version 1.0
 */
public class DrawCircle {
    public static void main(String[] args) {
        new DrawFrame();
    }
}

效果如下
在这里插入图片描述
main方法没有调用paint(Graphics g)方法,但也成功绘制圆形,因为该方法在下列情况中会自动调用

  1. 组件第一次在屏幕显示时
  2. 窗口最小化,再最大化
  3. 窗口大小发生变化
  4. repaint()方法被调用

事件处理

一个要实现监听,一个要进行监听

  1. 在面板后加implements KeyListener,继承键盘监听接口,即可进行事件的监听
//有字符输出时,该方法触发
    @Override
    public void keyTyped(KeyEvent e) {

    }

    //当某个键按下,该方法触发
    @Override
    public void keyPressed(KeyEvent e) {
    	if(e.getKeyCode() == KeyEvent.VK_DOWN){//KeyEvent.VK_DOWN对应方向下键
            y++;
        //坐标改变后,重新绘制
        this.repaint();
    }

    //当某个键释放,该方法触发
    @Override
    public void keyReleased(KeyEvent e) {
    	
    }
  1. 窗口构造器初始化时要对面板设置键盘监听
        //窗口JFrame对象可以监听mp的键盘事件
        this.addKeyListener(mp);

总代码如下

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/**
 * @author Lspero
 * @version 1.0
 * 演示小球通过键盘控制上下左右一定 -> Java事件控制
 */
public class BallMove extends JFrame{
    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);
        //窗口JFrame对象可以监听mp的键盘事件
        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() + "被按下");
        //根据输入控制小球移动
        if(e.getKeyCode() == KeyEvent.VK_DOWN){//KeyEvent.VK_DOWN对应方向下键
            y++;
            //this.repaint();
        }else if(e.getKeyCode() == KeyEvent.VK_UP){
            y--;
            //this.repaint();
        }else if(e.getKeyCode() == KeyEvent.VK_LEFT){
            x--;
            //this.repaint();
        }else if(e.getKeyCode() == KeyEvent.VK_RIGHT){
            x++;
            //this.repaint();
        }
        //坐标改变后,重新绘制
        this.repaint();
    }

    //当某个键释放,该方法触发
    @Override
    public void keyReleased(KeyEvent e) {

    }
}

/*
事件源:产生事件的对象
事件:承载事件源改变时的对象 如 KeyEvent
事件监听器接口:1.当事件源产生一个事件时,可以传送给事件监听者处理
             2.事件监听者本质是一个类,实现了事件监听接口
             3.一个类可以实现多个监听器
             4.在 java.awt.event包 和 java.swing.event包 中
 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值