栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java怎么通过键盘实现动态控制小球移动

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java怎么通过键盘实现动态控制小球移动

这一操作依赖于Java的事件机制,键盘按键会触发一个事件, 我们捕获到这个事件,然后做相应的处理。

所谓动态移动其实就是根据坐标不断地重新绘制。

思路

  1. 定义一个MyPanel类 继承 JPanel
  2. 然后在MyPanel的paint方法里画出一个小球,将它的坐标设置为全局变量
  3. 让我们的面板类实现键盘监听器KeyListener,然后在keyPressed方法里更新小球的坐标,然后repaint()
  4. 把我们的MyPanel对象放到一个JFrame里显示,让JFrame对象也注册键盘监听事件 ,传入我们实现了KeyListener的 MyPanel对象,作为键盘事件的处理方法,addKeyListener(myPanel)
package event;

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


public class Ballmove extends JFrame {
    public static void main(String[] args) {
        new Ballmove();
    }
    public Ballmove() {
        MyPanel myPanel = new MyPanel();
        this.add(myPanel);
        //让窗口 JFrame 对象可以监听到键盘事件
        this.addKeyListener(myPanel);
        this.setSize(400,300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}

//KeyListener是一个监听器,可以监听键盘事件,类比可以推知,还有鼠标监听器等
class MyPanel extends JPanel implements KeyListener {
    //x和y是小球的左上角坐标,为了让他动起来,设置为变量
    int x = 10;
    int y = 10;

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        //画出小圆球,每次按键其实都是根据新的x、y重新画了一次小球
        g.fillOval(x, y , 20, 20);

    }

    //有字符输出时,该方法就会触发
    @Override
    public void keyTyped(KeyEvent e) {
    }

    //当某个键按下,该方法会触发,一般我们在这里写触发的逻辑即可
    @Override
    public void keyPressed(KeyEvent e) {
        //System.out.println((char)e.getKeyCode() + " 被按下了..");
        //根据用户按下的不同键,来处理小球的移动
        //每一个键都有对应的code,e.getKeyCode()就是获取当前事件的按键code
        if(e.getKeyCode() == KeyEvent.VK_DOWN){  //VK_DOWN就是下箭头的code
            y++; //
            this.repaint(); //当使用repaint()时,paint方法将被调用,即完成重绘
        }else if(e.getKeyCode() == KeyEvent.VK_UP){  //VK_DOWN就是下箭头的code
            y--;
            this.repaint();
        }else if(e.getKeyCode() == KeyEvent.VK_RIGHT){
            x++;
            this.repaint();
        }else if(e.getKeyCode() == KeyEvent.VK_LEFT){
            x--;
            this.repaint();
        }
    }

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

ballMove

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1017457.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号