【问题标题】:How to use keyListener in Java applet如何在 Java 小程序中使用 keyListener
【发布时间】:2013-01-15 19:24:17
【问题描述】:

我完全不知道如何在小程序中使用KeyListener(好吧,我有一个好主意)。我知道这与将焦点放在小程序上有关,但我不知道如何做到这一点。我的程序作为应用程序运行良好,但它不会将键盘输入作为小程序接受。如果有人能给我一些帮助,那就太好了。

我的代码是:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Window extends JApplet {

    static Ship ship;
    static ColorPanel panel;
    static boolean up=false, down=false, left=false, right=false;

            public static class PanelListener implements KeyListener{

        public void keyPressed(KeyEvent e){
            switch(e.getKeyCode()) {
                    case 38: ship.setMoving(true); down = true;break;
                    case 40: ship.setMoving(true); up = true;break;
                    case 37: ship.setMoving(true); left = true;break;
                    case 39: ship.setMoving(true); right = true;break;
                    case 32: ship.setFiring(true); break;
                    case 49: ship.setSwitching(true); ship.switchOrdinance(49); break;
                    case 50: ship.setSwitching(true); ship.switchOrdinance(50); break;
                    case 51: ship.setSwitching(true); ship.switchOrdinance(51); break;
                    case 52: ship.setSwitching(true); ship.switchOrdinance(52); break;
                    case 83: if(ship.shieldState()){ship.shieldOff();}else{ship.shieldOn();}
            }
            ship.setDirection(up,down,left,right);
            ship.setVelocity(3);
        }
        public void keyReleased(KeyEvent e){
            switch(e.getKeyCode()) {
                case 38: ship.setMoving(false); down = false; break;
                case 40: ship.setMoving(false); up = false; break;
                case 37: ship.setMoving(false); left = false; break;
                case 39: ship.setMoving(false); right = false; break;
                case 32: ship.setFiring(false); break;
                case 49: ship.setSwitching(false); break;
                case 50: ship.setSwitching(false); break;
                case 51: ship.setSwitching(false); break;
                case 52: ship.setSwitching(false); break;
                default: ship.setMoving(false); ship.setFiring(false); ship.setSwitching(false); left=false; right=false; up=false; down=false;
            }
            ship.setDirection(up,down,left,right);
            if(!up || !down || !right || !left){
                ship.setVelocity(0);
            }
        }
        public void keyTyped(KeyEvent e){
        }
    }

        public void init(){
            Container pane;
            ship=new Ship();
            panel = new ColorPanel(Color.black, 1340, 640);
            panel.sendShip(ship);
            pane=getContentPane();
            pane.add(panel);
            addKeyListener(new PanelListener());
        }
}

【问题讨论】:

标签: java swing awt keylistener japplet


【解决方案1】:

你是对的,你需要在init方法的末尾设置它为焦点

setFocusable(true);

如果您不这样做,您至少必须在面板中单击以获取遇到的键。

【讨论】:

    猜你喜欢
    • 2016-05-25
    • 2013-12-24
    • 2012-05-23
    • 1970-01-01
    • 2018-09-25
    • 2017-02-19
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多