使在Java中的KeyEvent只有一次,即使发生键时举行 [英] Make a KeyEvent in Java only happen once even when key is held

查看:210
本文介绍了使在Java中的KeyEvent只有一次,即使发生键时举行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要知道是否有可能有一个动作,只有当一个键被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

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中的KeyEvent只有一次,即使发生键时举行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆