gpt4 book ai didi

java - KeyListener 无法聚焦

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:54 29 4
gpt4 key购买 nike

我是 Java 新手,所以请原谅我寻求帮助,但经过 4 个小时的寻找解决方案后,我真的变得绝望了。

我目前正在设置游戏并想要实现按键控制。我尝试通过 KeyListener 和 KeyEventDispatcher 来执行此操作,但我无法让它工作。KeyListener 只是不会使用react。我认为应该使用它的方法才是焦点。

代码如下:

public class Sins extends JFrame implements KeyEventDispatcher  {

public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getID() == KeyEvent.KEY_PRESSED ) {
if(KeyEvent.VK_UP == e.getID()){
System.exit(0);
}

} else if (e.getID() == KeyEvent.KEY_RELEASED) {
if(KeyEvent.VK_UP == e.getID()){
System.exit(0);
}
} else if (e.getID() == KeyEvent.KEY_TYPED) {
if(KeyEvent.VK_UP == e.getID()){
System.exit(0);
}
}
return false;
}

这是它应该工作的方法:

  public void run() { 

setFocusable(true);
backgroundGraphics = (Graphics2D) background.getGraphics();
long fpsWait = (long) (1.0 / 30 * 1000);



requestFocusInWindow();

main: while (isRunning==true) {
long renderStart = System.nanoTime();

KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
manager.addKeyEventDispatcher(this);

x++;
requestFocusInWindow();

// Update Graphics
do {
Graphics2D bg = getBuffer();

if (isRunning == false) {
break main;
}
renderGame(backgroundGraphics); // this calls your draw method

if (scale != 1) {
bg.drawImage(background, 0, 0, width * scale, height
* scale, 0, 0, width, height, null);
} else {
bg.drawImage(background, 0, 0, null);
}
bg.dispose();

requestFocusInWindow();


this.requestFocus();

if(x ==5000){
isRunning=false;
}

} while (!updateScreen());

// Better do some FPS limiting here
long renderTime = (System.nanoTime() - renderStart) / 10000;
try {
Thread.sleep(Math.max(0, fpsWait - renderTime));
} catch (InterruptedException e) {
Thread.interrupted();
break;
}


renderTime = (System.nanoTime() - renderStart) / 10000;

}

this.dispose();
System.exit(0);
}

该程序目前正在计数到 5000 后自行关闭。出于测试目的,我尝试通过向上按钮关闭它,但它不会以这种方式关闭。我真的很感谢您的帮助,因为我说过我是 Java 新手。

最佳答案

您在使用KeyListener时遇到的第一个问题是众所周知且有据可查的(尤其是这里)。 KeyListener 仅当它们附加到的组件可聚焦并且具有键盘焦点时才会响应。想象一个文本字段,当它没有焦点时,它不会更新。

你的第二个问题是使用KeyBoardFocusManager,这对于这个问题来说简直是矫枉过正。

相反,您应该使用 [Key Bindings] API,它比监视 KeyBoardFocusManager 更简单,并且比 KeyListeners 更强大

关于java - KeyListener 无法聚焦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16530698/

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