Java实现小球移动

Java实现小球移动

要求

  • 使用Java类 JFrame,JPanel及其事件监听机制实现小球的移动

类介绍

1. JFrame类
  • JFrame类可以简单理解一个画框,可以向画框中添加各种组件,如面板panel等

  • 构造器

    JFrame() {}
    //构造一个最初不可见的新框架。 
    
    JFrame(GraphicsConfiguration gc) {}
    //在屏幕设备的指定 GraphicsConfiguration中创建一个 Frame和一个空白标题。 
    
    JFrame(String title) {}
    //创建一个新的,最初不可见的 Frame与指定的标题。 
        
    JFrame(String title, GraphicsConfiguration gc) {}
    //创建 JFrame具有指定标题和指定 GraphicsConfiguration屏幕设备的。 
    
    
  • 常用方法

    add(); //向画框中添加组件
    
    setSize(400, 300); //设置窗口大小
    
    //窗口JFrame设置监听事件,即可以监听面板触发的事件
    addKeyListener();
    
    //设置关闭面板的方式
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    //设置面板可视化
    setVisible(true);
    
2. JPanel类
  • JPanel是一个通用的轻量级容器,可以简单理解为画纸,所有东西全部画在面板上,然后添加到Frame

  • 构造器

    JPanel() {}
    //创建一个新的 JPanel双缓冲区和流布局。 
        
    JPanel(boolean isDoubleBuffered) {}
    //创建一个新的 JPanel与 FlowLayout和指定的缓冲策略。 
        
    JPanel(LayoutManager layout) {}
    //使用指定的布局管理器创建一个新的缓冲JPanel  
        
    JPanel(LayoutManager layout, boolean isDoubleBuffered) {}
    //使用指定的布局管理器和缓冲策略创建一个新的JPanel。 
    
    
  • 常用方法

    paint(){}
    //使用画笔画
    
3. Graphics类
  • Graphics类是所有图形上下文的抽象基类,允许应用程序绘制在各种设备上实现的组件,以及屏幕上的图像。

  • 该类的实例化对象即为一支画笔,可以使用此画笔画出各种图像

    		//画圆形
            g.drawOval(10, 10, 100, 100);
            //画直线
            g.drawLine(10, 10, 100, 100);
            //画矩形边框
            g.drawRect(10,10,100,100);
            //画椭圆边框
            g.drawOval(10, 10, 100,200);
            //填充矩形
            g.fillRect(10,10,100,100);
            // 设置画笔的颜色
            g.setColor(Color.blue);
    
            //画图片
           // Image image = 	 Toolkit.getDefaultToolkit().getImage(Panel.class.getResource(""));
           // g.drawImage(image, 10,10,175,221, this);
            g.setColor(Color.red);
            g.setFont(new Font("隶书",Font.BOLD,50));
            g.drawString("北京你好",100,100);
    
4. Coler类
  • Color类用于将颜色封装在默认的sRGB颜色空间中或由ColorSpace标识的任意颜色空间中的颜色 。
  • 每个颜色的隐含alpha值为1.0或构造函数中提供的一个显式的Alpha值。
  • alpha值定义了颜色的透明度,可以用范围0.0-1.0或0-255的浮点数来表示。
  • alpha值为1.0或255表示颜色完全不透明,alpha值为0或0.0意味着颜色是完全透明的。
  • 当构造一个Color具有显式α或得到一个的颜色/ alpha分量Color ,颜色分量决不会被预乘alpha分量。
  • 其中包含大量静态属性,即颜色
5. KeyListener
  • 用于接收键盘事件(按键)的侦听器界面。

  • 使用该组件的addKeyListener方法将从该类创建的侦听器对象注册到组件。 按键,释放或键入时会产生键盘事件。

  • 然后调用侦听器对象中的相关方法,并将KeyEvent传递给它。

  • 常用方法

     @Override
        public void keyTyped(KeyEvent e) {
            //有字符输出时,该方法就会触发
        }
    
        @Override
        public void keyPressed(KeyEvent e) {
            //当某个健按下,该方法就会触发
       
        }
    
        @Override
        public void keyReleased(KeyEvent e) {
            //当某个健释放,该方法就会触发
        }
    
6. KeyEvent
  • 当按下,释放或键入键时,此低级别事件由组件对象(例如文本字段)生成。
  • 该事件传递给每个KeyListenerKeyAdapter对象,该对象使用组件的addKeyListener方法注册接收此类事件。

思路分析

  1. 首先使用JFrame类和Jpanel类画出小球
  2. 使用事件监听机制控制小球移动
  3. 重新绘制小球,重新绘制会值得原先的小球消失

源码及分析

package net.basic_grammat_review.tankgame;

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

/**
 * @Author BH Tian
 * @Date 2022/1/8 12:52
 * @Version 1.0
 * 演示小球通过键盘控制上下左右的移动 (Java的时间控制)
 */
public class BallMove extends JFrame {

    private MyPanel3 mp = null;

    public static void main(String[] args) {

        new BallMove();

    }

    public BallMove() {
        mp = new MyPanel3();
        this.add(mp);
        this.setSize(400, 300);
        //窗口JFrame设置监听事件,即可以监听面板范数的事件
        this.addKeyListener(mp);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }


}

class MyPanel3 extends JPanel implements KeyListener {

    //为了让小球可以移动,把小球的左上角坐标(x,y)设置为变量
    int x = 10;
    int y = 10;
    //小球移动速度
    int speed = 5;

    @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) {
        //当某个健按下,该方法就会触发
        //在Java中,会给每个键分配一个值(int)
        if (e.getKeyCode() == KeyEvent.VK_DOWN) {
            y += speed;
        } else if (e.getKeyCode() == KeyEvent.VK_UP) {
            y -= speed;
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            x -= speed;
        } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            x += speed;
        }
        //按键触发后重新绘制小球
        this.repaint();
    }

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

posted @   mx_info  阅读(724)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示