大神们帮我看看这个代码面板中小球怎么动不了啊

小城听风雨 2016-11-02 03:35:17
package test;

import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class test2 extends JFrame{

public static void main(String[] args) {
test2 test2=new test2();
}

//构造方法
public test2(){
MyPanel mp=new MyPanel();
//加入到JFrame 实现监听
this.add(mp);

this.addKeyListener(mp);

this.setSize(400,300);
this.setVisible(true);
this.setLocation(300,200);
}

}

//定义一个自己的面板
class MyPanel extends JPanel implements KeyListener{

int x=10;
int y=10;

public void paint (Graphics graphics){
super.paint(graphics);
graphics.fillOval(x, y, 10, 10);
}

//键被按下
public void keyTyped(KeyEvent e) {
// System.out.println("被按下"+e.getKeyChar());
if(e.getKeyChar()==KeyEvent.VK_DOWN){
y++;
}else if(e.getKeyCode()==KeyEvent.VK_UP){
y--;
}else if(e.getKeyCode()==KeyEvent.VK_LEFT){
x--;
}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){
x++;
}
//调用repaint 函数,重绘界面
repaint();
}

//键被释放
public void keyPressed(KeyEvent e) {

}

//键的一个值被输出
public void keyReleased(KeyEvent e) {

}
}
...全文
245 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小城听风雨 2016-11-02
  • 打赏
  • 举报
回复
太感谢了,原来我把按下、松开、输出弄错位置了.
引用 2 楼 loneking2001 的回复:
忘记看你的注释,pressed 是按下,release 是松开,松开以后如果是可打印字符才会产生 typed 事件。
rayw0ng 2016-11-02
  • 打赏
  • 举报
回复
忘记看你的注释,pressed 是按下,release 是松开,松开以后如果是可打印字符才会产生 typed 事件。
rayw0ng 2016-11-02
  • 打赏
  • 举报
回复
package test;

import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class test2 extends JFrame {

	public static void main(String[] args) {
		test2 test2 = new test2();
	}

	// 构造方法
	public test2() {
		MyPanel mp = new MyPanel();
		// 加入到JFrame 实现监听
		this.add(mp);

		this.addKeyListener(mp);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setSize(400, 300);
		this.setVisible(true);
		this.setLocation(300, 200);
	}

}

// 定义一个自己的面板
class MyPanel extends JPanel implements KeyListener {

	int x = 10;
	int y = 10;

	public void paint(Graphics graphics) {
		super.paint(graphics);
		graphics.fillOval(x, y, 10, 10);
	}

	// 键被按下
	public void keyTyped(KeyEvent e) {
		System.out.println("被按下" + e.getKeyChar());
	}

	// 键被释放
	public void keyPressed(KeyEvent e) {
		if (e.getKeyCode() == KeyEvent.VK_DOWN) {
			y++;
		} else if (e.getKeyCode() == KeyEvent.VK_UP) {
			y--;
		} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
			x--;
		} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
			x++;
		}
		repaint();
	}

	// 键的一个值被输出
	public void keyReleased(KeyEvent e) {

	}
}
keyTyped 在文档上写的是 Unicode 字符时产生的事件,我的理解应该是可打印字符才能产生这个事件。方向键属于不可打印字符,所以根本不产生 keyTyped 事件。

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧