gpt4 book ai didi

java - 使 Java 中的 KeyEvent 仅在按住键时发生一次

转载 作者:行者123 更新时间:2023-11-29 05:23:38 25 4
gpt4 key购买 nike

我需要知道是否有可能在按下某个键时只发生一次 Action ,即使该键被按住了一段时间,如果可能的话,怎么做?这是我现在拥有的代码:

if(e.getKeyCode() == KeyEvent.VK_A)
{
attack = true;
moveX = -5;
draw(moveX, moveY);
players.get(username).setImageIcon("attack-left");
}

这是在 keyPressed 方法中,在 keyReleased 中,我将 moveX 设置为 0。因此,如果按下 A,图像应该向左 5 个单位并停止,无论 A 是否仍被按住或它已经发布。但这不起作用,它只是继续向左移动。我尝试使用 keyTyped,但没有用。

提前致谢,如果需要,我可以提供更多代码。

最佳答案

执行此操作的一种方法是将最后一次按下的键保存到一个字段中。然后,如果当前按下的键与上次按下的键相同,则什么都不做。按向上键,清除字段。

下面是一些示例代码:

package com.sandbox;

import javax.swing.JFrame;
import javax.swing.WindowConstants;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;

public class SwingSandbox {

private static Character lastKey = null;

public static void main(String[] args) throws IOException {
JFrame frame = buildFrame();
frame.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
if (lastKey == null || lastKey != e.getKeyChar()) {
lastKey = e.getKeyChar();
System.out.println("keyTyped: " + lastKey);
}
}

@Override
public void keyPressed(KeyEvent e) {
if (lastKey == null || lastKey != e.getKeyChar()) {
lastKey = e.getKeyChar();
System.out.println("keyPressed: " + lastKey);
}
}

@Override
public void keyReleased(KeyEvent e) {
lastKey = null;
System.out.println("keyReleased");
}
});

}

private static JFrame buildFrame() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setVisible(true);
return frame;
}


}

不管@schmop 的评论怎么说,我都没有经历过。使用此代码:

package com.sandbox;

import javax.swing.JFrame;
import javax.swing.WindowConstants;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;

public class SwingSandbox {

public static void main(String[] args) throws IOException {
JFrame frame = buildFrame();
frame.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
System.out.println("keyTyped");
}

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

@Override
public void keyReleased(KeyEvent e) {
System.out.println("keyReleased");
}
});

}

private static JFrame buildFrame() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setVisible(true);
return frame;
}


}

按住一个键打印这个:

keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped keyPressed keyTyped

关于java - 使 Java 中的 KeyEvent 仅在按住键时发生一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23642854/

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