KeyListener的事件显然是在Java小程序不点火 [英] KeyListener events apparently not firing in java applet

查看:188
本文介绍了KeyListener的事件显然是在Java小程序不点火的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚开始学习编程的小程序,和一般的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆