java - 当鼠标监听器处于 Activity 状态时键盘失去焦点

标签 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); 解决了键盘失去焦点的问题,但现在游戏闪烁得很厉害。我无法理解游戏中发生了什么。 问候

最佳答案

使用Key Bindings通过KeyListener,它提供了指定不同焦点上下文的能力。

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

关于java - 当鼠标监听器处于 Activity 状态时键盘失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13531359/

相关文章:

java - java Socket不能接收太多数据

angularjs - 如何在angularjs中选择表格中的单个项目

jquery - 可访问的全宽下拉菜单,具有 Jquery 悬停、焦点和模糊功能

java - JPanel 不想聚焦所以 KeyAdapter 不起作用

java - 为什么我不能访问面板的 getWidth() 和 getHeight() 函数?

java - 本地连接问题 selenium web 驱动程序与 chrome 驱动程序

java - 本体论推理

java - 在字符串中嵌入变量

java - 使用 JOptionPane.showOptionDialog 时如何监听 Enter 按钮

java - 如何使用 JTextPanel 获取字符串