import java.awt.*;
import java.awt.event.*;class app13_7 extends Frame implements KeyListener
{
static TextField tf=new TextField(20);
static TextArea ta=new TextArea(6,20);
public static void main(String args[])
{
app13_7 frm = new app13_7();
frm.setLayout(null);
frm.setTitle("按键事件");
frm.setBounds(100,100,240,150);
tf.setBounds(20,30,200,20);
ta.setBounds(20,55,200,80);
ta.setEnabled(false);
frm.add(tf);
frm.add(ta);
tf.addKeyListener(frm);
frm.setVisible(true);
}
public void keyPressed(KeyEvent e)  //这是接口方法吧?
{
if(e.isActionKey()) ta.append("您按的是Action键!\n");  //append与setText我想没有区别吧??
else ta.setText("keyPressed事件v tg ,您按了"+e.getKeyChar()+"键\n");
}
public void keyRelease(KeyEvent e)
{
ta.append("您现在放开了按键\n");
}
public void keyTyped(KeyEvent e)
{
String input = tf.getText()+e.getKeyChar();
if(e.getKeyChar()=='\n')  ta.setText(input);
}
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【sure2003】截止到2008-07-17 08:17:25的历史汇总数据(不包括此帖):
    发帖的总数量:245                      发帖的总分数:10383                    每贴平均分数:42                       
    回帖的总数量:210                      得分贴总数量:6                        回帖的得分率:2%                       
    结贴的总数量:244                      结贴的总分数:10333                    
    无满意结贴数:2                        无满意结贴分:50                       
    未结的帖子数:1                        未结的总分数:50                       
    结贴的百分比:99.59 %               结分的百分比:99.52 %                  
    无满意结贴率:0.82  %               无满意结分率:0.48  %                  
    值得尊敬
      

  2.   

    接口中所有的方法必须都实现,你没有实现
     public void keyReleased(KeyEvent e);
      

  3.   

    没法调对是啥意思啊,仔细看看JDK的帮助,getKeyChar对keyPressed和keyRelease两个方法没有作用的
      

  4.   

    要实现接口里全部的方法.
    public void keyReleased (KeyEvent e){}
    也可能是你上述的方法,因为粗心而写错了.
      

  5.   

    void keyTyped(KeyEvent e)键入某个键时调用此方法。void keyPressed(KeyEvent e)按下某个键时调用此方法。这两个有区别吗?
      

  6.   

    按下 Shift 键会生成 keyCode 为 VK_SHIFT 的 KEY_PRESSED 事件,而按下 'a' 键将生成 keyCode 为 VK_A 的 KEY_PRESSED 事件。释放 'a' 键后,会激发 keyCode 为 VK_A 的 KEY_RELEASED 事件。另外,还会生成一个 keyChar 值为 'A' 的 KEY_TYPED 事件。 按下和释放键盘上的键会导致(依次)生成以下键事件:     KEY_PRESSED
        KEY_TYPED(只在可生成有效 Unicode 字符时产生。)
        KEY_RELEASED
     但在某些情况下(例如,在激活自动重复或输入方法时),该顺序可能会有所不同(并且与平台有关)。
      

  7.   

    import java.awt.*;
    import java.awt.event.*;class app13_7 extends Frame implements KeyListener
    {
        static TextField tf=new TextField(20);
        static TextArea ta=new TextArea(6,20);
        public static void main(String args[])
        {
            app13_7 frm = new app13_7();
            frm.setLayout(null);
            frm.setTitle("按键事件");
            frm.setBounds(100,100,240,150);
            tf.setBounds(20,30,200,20);
            ta.setBounds(20,55,200,80);
            ta.setEnabled(false);
            frm.add(tf);
            frm.add(ta);
            tf.addKeyListener(frm);
            frm.setVisible(true);
        }
        public void keyPressed(KeyEvent e)  //这是接口方法吧?
        {
            if(e.isActionKey()) ta.append("您按的是Action键!\n");  //append与setText我想没有区别吧??
            else ta.setText("keyPressed事件v tg ,您按了"+e.getKeyChar()+"键\n");
        }
        public void keyRelease(KeyEvent e)
        {
            ta.append("您现在放开了按键\n");        
        }
        public void keyTyped(KeyEvent e)
        {
            String input = tf.getText()+e.getKeyChar();
            if(e.getKeyChar()=='\n')  ta.setText(input);
        }
    public void keyReleased(KeyEvent key) {


    }
    }运行下是不是对了
      

  8.   


    Typed 键入字符 Pressed 按下键盘上的按键,当按下 Shift 键时并不会键入字符,此时只会引发 Pressed 事件而不会引发 Typed 事件。
      

  9.   

    public class KeyEvent extends InputEvent表示组件中发生键击的事件。 当按下、释放或键入某个键时,组件对象(如文本字段)将生成此低级别事件。该事件被传递给每一个 KeyListener 或 KeyAdapter 对象,这些对象使用组件的 addKeyListener 方法注册,以接收此类事件。(KeyAdapter 对象实现 KeyListener 接口。)发生事件时,所有此类侦听器对象都将获得此 KeyEvent。 “键入键”事件 是高级别事件,通常不依赖于平台或键盘布局。输入 Unicode 字符时生成此类事件,它们被认为是发现字符输入的最佳方式。最简单的情况是,按下单个键(如 "a")将产生键入键事件。但是,字符经常是通过一系列按键(如‘shift’+‘a’)产生的,按下键事件和键入键事件的映射关系可能是多对一或多对多的。键释放通常不需要生成键入键事件,但在某些情况下,只有释放了某个键后才能生成键入键事件(如在 Windows 中通过 Alt-Numpad 方法来输入 ASCII 序列)。对于不生成 Unicode 字符的键是不会生成键入键事件的(如动作键、修改键等等)。 getKeyChar 方法总是返回有效的 Unicode 字符或 CHAR_UNDEFINED。KEY_TYPED 事件报告字符输入:KEY_PRESSED 和 KEY_RELEASED 事件不必与字符输入关联。因此,可以保证 getKeyChar 方法的结果只对 KEY_TYPED 事件有意义。 对于按下键和释放键事件,getKeyCode 方法返回该事件的 keyCode。对于键入键事件,getKeyCode 方法总是返回 VK_UNDEFINED。 “按下键”和“释放键”事件 是低级别事件,依赖于平台和键盘布局。只要按下或释放键就生成这些事件,它们是发现不生成字符输入的键(如动作键、修改键等等)的惟一方式。通过 getKeyCode 方法可指出按下或释放的键,该方法返回一个虚拟键码。 虚拟键码 用于报告按下了键盘上的哪个键,而不是一次或多次键击组合生成的字符(如 "A" 是由 shift + "a" 生成的)。 例如,按下 Shift 键会生成 keyCode 为 VK_SHIFT 的 KEY_PRESSED 事件,而按下 'a' 键将生成 keyCode 为 VK_A 的 KEY_PRESSED 事件。释放 'a' 键后,会激发 keyCode 为 VK_A 的 KEY_RELEASED 事件。另外,还会生成一个 keyChar 值为 'A' 的 KEY_TYPED 事件。 按下和释放键盘上的键会导致(依次)生成以下键事件:     KEY_PRESSED
        KEY_TYPED(只在可生成有效 Unicode 字符时产生。)
        KEY_RELEASED
     但在某些情况下(例如,在激活自动重复或输入方法时),该顺序可能会有所不同(并且与平台有关)。 
    注: 不产生 Unicode 字符的键组合(如 F1 和 HELP 键等动作键)不会生成 KEY_TYPED 事件。 
    并非所有键盘和系统都能够生成所有的虚拟键码。在 Java 中不会尝试人为地生成这些键。 
    虚拟键码不标识物理键:它们取决于平台和键盘布局。例如,使用美国键盘布局时生成 VK_Q 的键在使用法国键盘布局时将生成 VK_A。 
    并非所有的字符都有与之关联的 keycode。例如,没有用于问号的 keycode,因为没有在主层上显示问号的键盘。 
    为了支持平台无关的动作键处理,Java 平台为某些功能使用少量附加虚拟键常量,否则必须通过解释虚拟键码和修饰符来识别这些功能。例如,对于日文 Windows 键盘,返回 VK_ALL_CANDIDATES 而不是 VK_CONVERT 加 ALT 修饰符。 
    正如 Focus Specification 中指定的那样,默认情况下键事件被指派给焦点拥有者。 
    警告:除了 Java 语言定义的这些键之外(VK_ENTER、VK_BACK_SPACE 和 VK_TAB),不要依赖 VK_ 常量值。Sun 保留将来根据需要更改这些值的权利,以适应更大范围的键盘。