问题描述
我需要知道是否有可能有一个动作,只有当一个键被pressed,即使该键被按下一段时间发生一次,并且如果可能的话,如何?
这是code我有现在:
I need to know if it is possible to have an action only happen once when a key is pressed, even if that key is held down for some time, and if it is possible, how?This is the code I have for that now:
if(e.getKeyCode() == KeyEvent.VK_A)
{
attack = true;
moveX = -5;
draw(moveX, moveY);
players.get(username).setImageIcon("attack-left");
}
这是关键pressed方法中,并在调用keyReleased我设置MOVEX为0。因此,如果A是pressed图像被假定5个单位的左侧和停止,而不管是否A仍然被关押,或者它已被释放。但是,这是行不通的,它只是不断移动到左边。我尝试使用,但的keyTyped没有工作。
This is within the keyPressed method, and in the keyReleased I set moveX to 0. So if A is pressed the image is supposed to 5 units to the left and stop, regardless of whether or not A is still being held down or it has been released. But this is not working, it just keeps on moving to the left. I tried using keyTyped but it didn't work.
在此先感谢了,如果需要,我可以提供更多的code。
Thanks in advance, and if needed I can provide more code.
推荐答案
一个做到这一点的方法是,以节省pssed到字段的最后一个键$ P $。然后,如果当前的密钥pressed相同的最后一个键pressed,不要做任何事情。在一个键上,清除该字段。
One way to do this is to save the last key pressed into a field. Then, if the current key pressed is the same as the last key pressed, don't do anything. On a key up, clear the field.
下面是一些例子code:
Here's some example code:
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的评论说,我没有遇到。有了这个code:
Despite what @schmop's comment says, I'm not experiencing that. With this code:
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;
}
}
这按住一键打印这样的:
This holding down a key prints this:
键pressed关键的keyTyped pressed关键的keyTyped pressed关键的keyTyped pressed
关键的keyTyped pressed关键的keyTyped pressed的keyTyped pssed关键的keyTyped $ P $
关键pressed关键的keyTyped pressed关键的keyTyped pressed关键的keyTyped pressed
关键的keyTyped pressed关键的keyTyped pressed的keyTyped pssed关键的keyTyped $ P $
关键pressed关键的keyTyped pressed关键的keyTyped pressed关键的keyTyped pressed
关键的keyTyped pressed关键的keyTyped pressed的keyTyped
这篇关于使在Java中的KeyEvent只有一次,即使发生键时举行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!