Java自学笔记——绘图入门

2022-06-22 00:00:00 绘图 入门 自学

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

效果如下
《Java自学笔记——绘图入门》
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包 中 */

    原文作者:Lspero
    原文地址: https://blog.csdn.net/weixin_43880212/article/details/121453434
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章