键盘在鼠标侦听器处于活动状态时失去焦点

时间:2012-11-23 14:47:29

标签: java focus keylistener mouselistener

我正在制作一个双人游戏小程序。两名球员都需要控制他们的光盘以防止球与墙壁发生碰撞。一个播放器用鼠标移动控制他的光盘,用键盘上下控制其他控件。问题是第二个播放器无法控制他的光盘,因为键盘键因为MouseMotionListener而不能保持对焦。我不知道如何解决这个问题。这是代码:

public void init()
{
handle = new HandlerClass();

addMouseMotionListener(handle);
addKeyListener(handle);
}

private class HandlerClass implements MouseMotionListener,KeyListener
{       
public void mouseMoved(MouseEvent event)
{
    MouseY=event.getY();

    if(MouseY<=0)
        MouseY=0;
    else
        if(MouseY>=getHeight()-radius*2-1)
            MouseY=getHeight()-radius*2-1;

}
public void keyPressed(KeyEvent event)
{
    switch(event.getKeyCode())
    {
    case KeyEvent.VK_UP:

        if(keyboardY<=0)
        {
            keyboardY=0;
        }

        keyboardY=keyboardY+1;
        break;

    case KeyEvent.VK_DOWN:

        System.out.println("down key pressed");
        if(keyboardY>=getHeight()-radius*2-1)
        {
            keyboardY=getHeight()-radius*2-1;
        }
        keyboardY-=1;
        break;
    }
 }

修改 我通过添加setFocusable(true);解决了失去键盘焦点的问题,但现在游戏闪烁着地狱。我不能在游戏中发生什么。 此致

2 个答案:

答案 0 :(得分:1)

使用不同的侦听器进行键盘和鼠标操作。

答案 1 :(得分:1)

使用Key Bindings而不是KeyListener,它可以指定不同的焦点背景。

关于你的第二个问题,听起来你直接在顶级容器上绘画。我将使用示例代码发布一个单独的问题。