KeyListener没有到达我的switch语句 [英] KeyListener not reaching my switch statement
问题描述
我有这段代码:
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屋!