本文介绍了使在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

这篇关于使在Java中的KeyEvent只有一次,即使发生键时举行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-12 03:11