KeyListener没有到达我的switch语句 [英] KeyListener not reaching my switch statement

查看:77
本文介绍了KeyListener没有到达我的switch语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这段代码:

    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;

    import javax.swing.JApplet;


    public class applet extends JApplet implements KeyListener, MouseListener{
        int a = 0;
        int b = 0;
        public void init(){
            setSize(500,500);
            addKeyListener( this );
             addMouseListener( this );
        }
        public void paint(Graphics g){
            g.setColor(Color.BLUE);
            g.fillRect(a, b, 400, 400);
        }
        @Override
        public void keyPressed(KeyEvent e) {
        System.out.println("Hello!")    
switch(e.getKeyCode()){
                case KeyEvent.VK_DOWN: a -= 5;
                break;
                case KeyEvent.VK_UP: a += 5;
                break;
                case KeyEvent.VK_RIGHT: b += 5;
                break;
                case KeyEvent.VK_LEFT: b -= 5;
                break;
            }
            repaint();
        }
        @Override
        public void keyReleased(KeyEvent e) {
            // TODO Auto-generated method stub

        }
        @Override
        public void keyTyped(KeyEvent e) {
            // TODO Auto-generated method stub

        }
        @Override
        public void mouseClicked(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }
        @Override
        public void mouseEntered(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }
        @Override
        public void mouseExited(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }
        @Override
        public void mousePressed(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }
        @Override
        public void mouseReleased(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }
    }

它甚至没有到达switch语句,我的调试println代码可以看到。为什么会发生这种情况,我该怎么做才能解决这个问题?请不要讨厌这是否过于宽泛,因为我是这个主题的完整菜鸟

and it is not even reaching the switch statement,as can be seen by my debug println code. Why is this happening, and what can i do to fix this? Please do not hate if this is too broad, as I am a complete noob on this topic

推荐答案

KeyListener 只会触发事件,如果它注册的组件是可聚焦的并具有焦点。

KeyListener will only fire events if the component it is registered is focusable and has focus.

JApplet 有一个 JRootPane ,它在applet的ontop上添加了 JLayeredPane 和内容窗格(以及其他内容),可能意味着密钥监听器可能永远无法开始通知事件(因为其他元素阻止它)。

JApplet has a JRootPane which adds a JLayeredPane and content pane (amongst other things) ontop of the applet, which may mean that key listener may never be capable of begin notified of events (as other elements are blocking it).

相反,使用关键绑定

这篇关于KeyListener没有到达我的switch语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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