我想在窗口中显示从键盘中输入的字符,但无论怎么输入都只显示Enter,这是为什么呢?是不是getKeyText方法有问题?
代码如下,已经把getKeyText方法标出来了。import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class J_Keyboard extends JFrame
{
String m_string="";

public J_Keyboard()
{
super("Example of Keyboard event handling");
addFocusListener(new FocusListener()
{
public void focusGained(FocusEvent e)
{
System.out.println("Get focus!\n");
}
public void focusLost(FocusEvent e)
{
System.out.println("Lose focus\n");
}
}
);

addKeyListener(new KeyAdapter()
{
public void keyTyped(KeyEvent e)
{
m_string=e.getKeyText(10); //×××××是不是这里调用getKeyText(10)方法出了问题。
repaint();
}
}
);

setSize(250,200);
setVisible(true);
}

public void paint(Graphics g)
{
Dimension d=getMaximumSize();
g.clearRect(0, 0, d.width, d.height);
g.drawString(m_string, 120,55);
}

public static void main(String []args)
{
JFrame app=new J_Keyboard();
Container cp=app.getContentPane();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

解决方案 »

  1.   

    API中代码如下:
        public static String getKeyText(int keyCode) {
            if (keyCode >= VK_0 && keyCode <= VK_9 || 
                keyCode >= VK_A && keyCode <= VK_Z) {
                return String.valueOf((char)keyCode);
            }        switch(keyCode) {
              case VK_ENTER: return Toolkit.getProperty("AWT.enter", "Enter");
              case VK_BACK_SPACE: return Toolkit.getProperty("AWT.backSpace", "Backspace");
              case VK_TAB: return Toolkit.getProperty("AWT.tab", "Tab");
               =============================================================================        if (keyCode >= VK_0 && keyCode <= VK_9 || 
                keyCode >= VK_A && keyCode <= VK_Z) {
                return String.valueOf((char)keyCode);
            }        0-9和A-Z都将 keyCode 直接返回
            而 VK_ENTER 的值是 10
            所以 e.getKeyText(10); 返回的当然是 "Enter"
      

  2.   

    0-9和A-Z都将 keyCode 转换成对应的char直接返回