gpt4 book ai didi

java - 由于 BufferStrategy,KeyEvent 未生成

转载 作者:行者123 更新时间:2023-12-02 11:45:21 26 4
gpt4 key购买 nike

所以我正在制作一个游戏,并且我的主游戏应用程序运行良好。问题是,当我尝试通过菜单(例如使用按钮 ActionEvent)启动游戏时,我的游戏似乎无法检测到提供给它的 KeyEvent。所以我决定制作一个简单版本的代码,其中的问题是:

class Response
{
static JFrame frame;
static BufferStrategy strategy;
public Response()
{
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setUndecorated(true);
frame.setIgnoreRepaint(true);
frame.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e)
{
System.exit(0);
}
});
frame.setVisible(true);
frame.createBufferStrategy(2);
strategy = frame.getBufferStrategy();

frame.requestFocus();
}
public static void mainLoop()
{
while(true)
strategy.show();
}
}

class Button implements ActionListener
{
JFrame f;
JButton b;
public Button()
{
f = new JFrame();
f.setExtendedState(JFrame.MAXIMIZED_BOTH);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
b = new JButton("Click lol");
b.setFocusable(false);
b.addActionListener(this);
f.add(b);
f.setVisible(true);
f.setFocusable(false);
}

public void actionPerformed(ActionEvent e)
{
f.dispose();
new Response();
Response.mainLoop();
}

public static void main(String args[])
{
new Button();
}
}

单击此处的按钮后,正如预期的那样,我得到了一个空白屏幕,但它没有检测到 KeyTyped 事件,并且经过检查,似乎 Response.frame 没有焦点。

但是,如果我将 main() 的内容更改为
新的响应();
Response.mainLoop();
,KeyEvent 被检测到。

调用了 setFocusable() 方法,希望 Button 中的组件将焦点传递给 Response 框架。(经过几个小时尝试找到解决方案后,我得出的结论是,使用 BufferStrategyJFrames 无法得到关注(尽管我还没有在任何地方明确地看到它,所以请随时纠正我)。

知道发生了什么吗?

提前致谢。

最佳答案

一般来说,java/swing 中的焦点似乎是一个相当难以捉摸的东西。我经历过,即使在调用应该将焦点赋予这些组件的特定方法之后,组件也没有焦点。调用 setFocusable() 后,如果任何 swing 组件上存在 setEnabled(),您应该能够在应用程序启动后通过单击该组件来将焦点设置在该组件上。运行,据我所知,这是可以实现的最好目标,并且保证有效。但是,永远不要依赖于以您希望的方式传递焦点的组件。这不太可能发生。

关于java - 由于 BufferStrategy,KeyEvent 未生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48249896/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com