这一操作依赖于Java的事件机制,键盘按键会触发一个事件, 我们捕获到这个事件,然后做相应的处理。
所谓动态移动其实就是根据坐标不断地重新绘制。
思路文章来源:https://www.toymoban.com/news/detail-524401.html
- 定义一个MyPanel类 继承 JPanel
- 然后在MyPanel的paint方法里画出一个小球,将它的坐标设置为全局变量
- 让我们的面板类实现键盘监听器KeyListener,然后在keyPressed方法里更新小球的坐标,然后repaint()
- 把我们的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;
/**
* 演示小球通过键盘控制上下左右的移动,依靠java事件机制实现
*/
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文章来源地址https://www.toymoban.com/news/detail-524401.html
到了这里,关于Java怎么通过键盘实现动态控制小球移动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!