当前位置: 首页 > 知识库问答 >
问题:

钥匙适配器不工作

田鸿彩
2023-03-14

我只是写了一些小代码试图让我的KeyEvent管理器工作。

正如你所见,我创建了一个JFrame并添加了gameComponent,它是Game类的一个对象。我将JPanel设置为可调焦,并请求调焦。然后将名为TAdapter的KeyAdapter设置为KeyAdapter。您可以在代码的最底层看到该类,它扩展了KeyAdapter和方法keyPressed()。

我告诉程序在按下一个键时将“按下”打印到我的控制台,但什么也没发生。

我不知道我做错了什么,也许有人看到了一些我自己没有看到的虫子?

任何帮助都将不胜感激

提前谢谢

    public class Game extends JPanel {

public static final int WIDTH = 320;
public static final int HEIGHT = 240;
public static final int SCALE = 3;

public Game() {
    addKeyListener(new TAdapter());
    setFocusable(true);
    requestFocus();
}

public static void main(String[] args) {
    Game gameComponent = new Game();
    Dimension size = new Dimension(WIDTH*SCALE, HEIGHT*SCALE);
    JFrame frame = new JFrame("Invaders");

    frame.setVisible(true);
    frame.setSize(size);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.add(gameComponent);
}

public class TAdapter extends KeyAdapter {

    public void keyPressed(KeyEvent e) {
        System.out.println("Pressed");
    }
}   
}

共有1个答案

滕璞瑜
2023-03-14
requestFocus();

正确的使用方法是:

requestFocusInWindow();

虽然即使是这种方法也不起作用,因为这些方法只能在可见的组件上调用。当你创建组件时,它还不可见,所以去掉那行代码。

代码的主要问题是在框架可见后将组件添加到框架中。代码应该是这样的:

frame.add(gameComponent);
frame.setSize(size);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setVisible(true);

那就是setViable(true)应该是在所有组件都添加到框架中之后做的最后一件事。

最后,你甚至不应该使用KeyListener。Swing设计用于键绑定。正确使用密钥绑定时,不会出现焦点问题。

 类似资料:
  • 我有一个和这里完全相同的问题:spring boot-KeyCloak指向403被禁止但是,这个问题的答案说角色可能没有在KeyCloak服务器中配置或分配,这就是我的情况。 使用keycloak服务器对用户进行身份验证的一个有角度的前端应用程序。 然后将接收到的令牌传递给使用keycloak-spring-boot-2-starter使用spring-boot开发的rest服务。 这就是问题所在

  • 我正试图在我的spring boot应用程序中使用KeyClope。 我想根据REST方法和用户角色限制对特定URL的访问。 在下面的示例中,具有或角色的用户可以执行GET,而具有或角色的用户可以执行POST、PUT或DELETE。 不幸的是,此配置允许任何经过身份验证的用户访问/api/日历URL。我做错了什么?

  • 我正在研究使用Hibernate 4.1.9注释地图的不同方法 如果我想存储一个Map,其中键是实体值的属性,标记如下所示 请注意,上面的标记不会创建连接表,而是在运行时通过查询返回Map,因此Map是动态的,您不必在map中添加元素Java查询返回它们。 现在,我希望地图的内容反映应用程序添加到地图中的内容,而不是执行动态查询。 我想储存4种不同的地图 在这些情况下,键之间没有关系 我尝试了以下

  • Targets key To be discussed in order to avoid _Warning: potential malicious behavior - trust data has insufficient signatures for remote repository .dkr.ecr.us-east-1.amazonaws.com/app: valid signatur

  • Snapshot key To rotate the snapshot key: ❯ notary -D -v -s https://127.0.0.1:4443 -d ~/.docker/trust key rotate <aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/app snapshot -r Enter passphrase for ne

  • Timestamp key The timestamp key can also be rotated: ❯ notary -D -v -s https://127.0.0.1:4443 -d ~/.docker/trust key rotate <aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/app timestamp -r Enter the