Java的监听事件处理主要是针对怎么去做交互的,鼠标和键盘怎么和程序交互。本文将提供一个小球移动的案例来介绍。
案例:小球移动。
通过键盘控制上下左右键移动,电脑屏幕展示小球做出对应的移动。
想要完成小球移动的前提是,我们需要学习怎么使用Java进行绘图。
//先定义一个MyPanel,继承JPanel。画图形,在面板上画
class MyPanel extends JPanel{//1、MyPanel对象是一个画板//2、Graphics g把g理解成一支画笔//3、Graphics提供了很多绘图方法@Overridepublic void print(Graphics g) {//绘图方法super.print(g);//画出一个圆形g.drawLine(10,20,10,20);g.drawRect(10,10,100,100);}}
public class DrawCircle extends JFrame{//JFrame可以理解成一个画框//定义一个面板private MyPanel mp=null;public static void main(String[] args) {new DrawCircle();}public DrawCircle(){//构造器//初始化一个面板mp=new MyPanel();//把我们的面板放入到画框,窗口this.add(mp);//设置一下窗口的大小this.setSize(400,300);this.setVisible(true);}
}
DrawCircle
需要继承 JFrame
这个类。(JFrame这个类就是一个窗体的意思,类似于C#的窗体)**mp
,在构造器里进行初始化,再把这个画板对象加入到我们的画框中。(画板是你画好的东西,画好之后把画板插入到画框中)上面已经实现了Java作图,画好了小球,接下来要实现键盘和小球的交互。
实现交互最重要的是要去监听,通过java的监听事件监听键盘的操作:让MyPanel
类去继承 KeyListener
类
class MyPanel extends JPanel implements KeyListener
完成这个继承事件以后会自动生成三个方法,:
public void keyTyped(KeyEvent e)
public void keyPressed(KeyEvent e)
public void keyReleased(KeyEvent e)
我们在这三个方法中完成业务逻辑即可。
@Overridepublic void paint(Graphics g) {super.paint(g);g.fillOval(x,y,20,20);//默认黑色}//有字符输出时,该方法就会被触发@Overridepublic void keyTyped(KeyEvent e) {}//当某个键按下,该方法就会被触发@Overridepublic void keyPressed(KeyEvent e) {}//当某个键释放时,该方法就会被触发@Overridepublic void keyReleased(KeyEvent e) {}
package com.event;import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.security.Key;/*** @author * @version 1.0* 演示小球通过键盘控制上下左右的移动-->讲解java的事件控制*/
public class BallMove extends JFrame{MyPanel mp=null;public static void main(String[] args) {new BallMove();}//构造器public BallMove(){mp=new MyPanel();this.add(mp);this.setSize(400,300);//窗口JFrame对象可以监听键盘事件,即可以监听到面板上发生的事件this.addKeyListener(mp);/*** 一般在Java图形程序编写过程中经常会用到这个方法,不难* 理解这个方法的用途就是在一个JFrame执行关闭操作时,将退出程序。如果* 在代码里没加这个方法,那么在点击框架的”叉叉“退出框架后,程序仍然没有退出,* 只是JFrame被关闭了。* */this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}
}
//面板,可以画出小球
//keyListener是监听器,可以监听键盘事件
class MyPanel extends JPanel implements KeyListener {/*** 为了让小球可以移动,把它的左上角的坐标设置成变量* */int x=10;int y=10;@Overridepublic void paint(Graphics g) {super.paint(g);g.fillOval(x,y,20,20);//默认黑色}//有字符输出时,该方法就会被触发@Overridepublic void keyTyped(KeyEvent e) {}//当某个键按下,该方法就会被触发@Overridepublic void keyPressed(KeyEvent e) {
// System.out.println((char) e.getKeyCode()+"被按下...");/*** 根据用户按下的不同按键,来处理小球的移动(上下左右的键)* 在java中会给每一个键盘的值分配一个值* */if (e.getKeyCode()==KeyEvent.VK_DOWN){//KeyEvent.VK_DOWN表示向下箭头的codey++;}else if (e.getKeyCode()==KeyEvent.VK_UP){y--;}else if (e.getKeyCode()== KeyEvent.VK_LEFT){x--;} else if (e.getKeyCode()==KeyEvent.VK_RIGHT) {x++;}//让面板重绘,相当于更新一下面板this.repaint();}//当某个键释放时,该方法就会被触发@Overridepublic void keyReleased(KeyEvent e) {}
}