我写了如下两段代码:
  代码段一:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class KeyHandle extends JFrame{
public KeyHandle(){
 //当前窗口添加键盘点击事件 
 this.addKeyListener(new java.awt.event.KeyAdapter(){
      public void keyTyped(KeyEvent e) {
         this_keyTyped();
      }
   }
 );
 this.setSize(300,400);
}
//键盘事件处理代码  
private void this_keyTyped(){
     System.out.println("Key is Pressed!!!!");
    }
    //主程序入口
public static void main(String args[]){
      KeyHandle keyHandle = new KeyHandle();
      keyHandle.show();
    }   
}
  测试:发现上述代码段能正常响应键盘事件(焦点在窗口上,按字母键有输出)!代码段二:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class KeyHandle extends JWindow{
public KeyHandle(){
 //当前窗口添加键盘点击事件 
 this.addKeyListener(new java.awt.event.KeyAdapter(){
      public void keyTyped(KeyEvent e) {
         this_keyTyped();
      }
   }
 );
 this.setSize(300,400);
}
//键盘事件处理代码  
private void this_keyTyped(){
     System.out.println("Key is Pressed!!!!");
    }
    //主程序入口
public static void main(String args[]){
      KeyHandle keyHandle = new KeyHandle();
      keyHandle.show();
    }   
}
测试:发现对键盘的操作无反应,不相应任何字母按键操作!
   
    难道是JWindow不支持键盘事件吗?但测试发现JWindows 支持鼠标事件?那第二段代码不相应键盘键,到底错在那里?应如何修改?才能在Jwindow里相应键盘事件?

解决方案 »

  1.   

    应该支持的,因为JWindow上面有addKeyListener()方法.我估计程序没反应是因为window是顶层组件,它上面被contentPane覆盖着,你的这个程序未能使焦点在它上面停滞很久,你可以在你的程序:
     this.setSize(300,400);
    后面加上一句:this.setBackground(Color.red);
    你会发现你看到红色是一闪而过但出现的不是红色表象,说明设置起作用了;
    再加上:this.getContentPane().setBackground(Color.red);
    这样就是红色窗体了,说明是你的程序未满足keyTyped()条件一已之见