KeyListener的事件显然是在Java小程序不点火 [英] KeyListener events apparently not firing in java applet
问题描述
我刚刚开始学习编程的小程序,和一般的Java GUI中,我试图做一个简单的游戏。此刻,我有主类(游戏)和播放器类(播放器)我有玩家在屏幕上绘图,但我挣扎着爬了关键事件的工作,任何帮助AP preciated <! / p>
玩家图像显示完全正常,但是当我命中关键在所有的位置不会改变。
编辑:错误的code发布的球员,更新
Game.java:
公共类游戏扩展的Applet { Player播放器; @覆盖
公共无效的init(){
玩家=新播放器(本);
this.setSize(800,600);
addKeyListener(播放器);
} @覆盖
公共无效漆(图形G){
player.paint(G);
}}
Player.java:
公共类播放器实现的KeyListener { 游戏游戏;
形象画像;
INT X;
诠释Ÿ; 大众玩家(游戏游戏){
this.game =游戏;
X = 0;
Y = 0;
图像= game.getImage(game.get codeBase的(),图像/ Player.png);
} 公共无效漆(图形G){
g.drawImage(图像,X,Y,游戏);
} @覆盖
公共无效的keyTyped(KeyEvent的E){
返回;
} @覆盖
公共无效键pressed(KeyEvent的E){
开关(e.getKey code()){
案例KeyEvent.VK_A:
点¯x - = 1;
打破;
案例KeyEvent.VK_D:
X + = 1;
打破;
案例KeyEvent.VK_S:
Y + = 1;
打破;
案例KeyEvent.VK_W:
Ÿ - = 1;
打破;
}
game.repaint();
} @覆盖
公共无效调用keyReleased(KeyEvent的E){
返回;
}
}
该小组可能要么没有焦点,或不可作为焦点。
试试这个code。我改变了键左/右/上/下箭头。为简单起见,我把它作为一个基于AWT小程序。
//&LT;小程序code =游戏WIDTH = 400 HEIGHT = 100&GT;&LT; /小程序&GT;
导入的java.applet。*;
进口java.awt中的*。
java.awt.event中导入*。公共类游戏扩展的Applet实现的KeyListener { Player播放器; @覆盖
公共无效的init(){
玩家=新播放器(的getImage(32));
addKeyListener(本);
setFocusable(真);
requestFocusInWindow();
} @覆盖
公共无效漆(图形G){
player.paint(G);
} 公众形象的getImage(INT大小){
图片IMG =的createImage(尺寸,大小);
图形G = img.getGraphics();
g.setColor(Color.RED);
g.fillRect(0,0,尺寸,大小); g.dispose(); 返回IMG;
} @覆盖
公共无效的keyTyped(KeyEvent的E){
返回;
} @覆盖
公共无效键pressed(KeyEvent的E){
开关(e.getKey code()){
案例KeyEvent.VK_LEFT:
player.x - = 1;
打破;
案例KeyEvent.VK_RIGHT:
player.x + = 1;
打破;
案例KeyEvent.VK_DOWN:
player.y + = 1;
打破;
案例KeyEvent.VK_UP:
player.y - = 1;
打破;
}
重绘();
} @覆盖
公共无效调用keyReleased(KeyEvent的E){
返回;
}
}类播放器{ 形象画像;
INT X;
诠释Ÿ; 公众播放器(形象画像){
X = 0;
Y = 0;
this.image =图像;
} 公共无效漆(图形G){
g.drawImage(图像,X,Y,NULL);
}}
I've just started learning to program applets, and java GUI in general, I'm attempting to make a simple game. At the moment, i have the main class (Game) and the player class (Player) i have the player drawing to the screen, but i'm struggling to get the key events to work, any help appreciated!
The player image displays perfectly fine, but the position doesn't change when i hit a key at all.
EDIT: wrong code posted for the player, updated
Game.java:
public class Game extends Applet {
Player player;
@Override
public void init() {
player = new Player(this);
this.setSize(800, 600);
addKeyListener(player);
}
@Override
public void paint(Graphics g) {
player.paint(g);
}
}
Player.java:
public class Player implements KeyListener {
Game game;
Image image;
int x;
int y;
public Player(Game game) {
this.game = game;
x = 0;
y = 0;
image = game.getImage(game.getCodeBase(), "images/Player.png");
}
public void paint(Graphics g) {
g.drawImage(image, x, y, game);
}
@Override
public void keyTyped(KeyEvent e) {
return;
}
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_A:
x -= 1;
break;
case KeyEvent.VK_D:
x += 1;
break;
case KeyEvent.VK_S:
y += 1;
break;
case KeyEvent.VK_W:
y -= 1;
break;
}
game.repaint();
}
@Override
public void keyReleased(KeyEvent e) {
return;
}
}
The panel probably either does not have focus, or is not focusable.
Try this code. I changed the keys to the left/right/up/down arrows. For simplicity, I left it as an AWT based applet.
// <applet code='Game' width=400 height=100></applet>
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Game extends Applet implements KeyListener {
Player player;
@Override
public void init() {
player = new Player(getImage(32));
addKeyListener(this);
setFocusable(true);
requestFocusInWindow();
}
@Override
public void paint(Graphics g) {
player.paint(g);
}
public Image getImage(int size) {
Image img = createImage(size,size);
Graphics g = img.getGraphics();
g.setColor(Color.RED);
g.fillRect(0,0,size,size);
g.dispose();
return img;
}
@Override
public void keyTyped(KeyEvent e) {
return;
}
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT:
player.x -= 1;
break;
case KeyEvent.VK_RIGHT:
player.x += 1;
break;
case KeyEvent.VK_DOWN:
player.y += 1;
break;
case KeyEvent.VK_UP:
player.y -= 1;
break;
}
repaint();
}
@Override
public void keyReleased(KeyEvent e) {
return;
}
}
class Player {
Image image;
int x;
int y;
public Player(Image image) {
x = 0;
y = 0;
this.image = image;
}
public void paint(Graphics g) {
g.drawImage(image, x, y, null);
}
}
这篇关于KeyListener的事件显然是在Java小程序不点火的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!