有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:KeyListeners确实可以工作,但只在我键入空格时工作

这仅在我键入空格键时有效。当我在空格键上单击时,它将打印“您键入的”,当我单击向上箭头时,它不会进入if语句。 我怎样才能使它打印“k”当我标签向上箭头

import javax.swing.*;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Font;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Tester extends JPanel{

  JFrame frame;

  public Tester(){

    frame = new JFrame("Testing...");
    TestK k = new TestK();

    setPreferredSize(new Dimension(800, 700));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(new Dimension(800,700));
    frame.pack();
    frame.setVisible(true);
    frame.addKeyListener(k);

  }

  public class TestK implements KeyListener{

    public void keyPressed(KeyEvent e){}
    public void keyReleased(KeyEvent e){}

    public void keyTyped(KeyEvent e){

      int key = e.getKeyCode();
      System.out.println("You typed");
      if(key == KeyEvent.VK_UP){
        System.out.println("K");
      }

    }
  }

  public static void main(String[] argv){

    Tester t = new Tester();
  }
}

共 (1) 个答案

  1. # 1 楼答案

    keyReleased代替keyTyped

    如果您阅读了KeyListener的JavaDocs,您将被发送到^{}的JavaDocs,其中

    "Key typed" events are higher-level and generally do not depend on the platform or keyboard layout. They are generated when a Unicode character is entered, and are the preferred way to find out about character input. In the simplest case, a key typed event is produced by a single key press (e.g., 'a'). Often, however, characters are produced by series of key presses (e.g., 'shift' + 'a'), and the mapping from key pressed events to key typed events may be many-to-one or many-to-many. Key releases are not usually necessary to generate a key typed event, but there are some cases where the key typed event is not generated until a key is released (e.g., entering ASCII sequences via the Alt-Numpad method in Windows). No key typed events are generated for keys that don't generate Unicode characters (e.g., action keys, modifier keys, etc.).

    这里最重要的部分是

    No key typed events are generated for keys that don't generate Unicode characters (e.g., action keys, modifier keys, etc.).

    这就是为什么没有调用keyTyped

    当你在做这件事时,你应该使用key bindings API来代替它,这将避免需要一个关于为什么你的KeyListener已经停止响应任何东西的后续问题