写了个基于JDialog的类,其又实现了KeyListener接口,
它有两个成员变量:JPanel和JButton
JPanel是用来盛放JButton的
窗口类中再给放上JPanel我发现个奇怪的现象,描述如下:
如果JDialog中的JPanel中不放JButton的话,KeyListener能够生效
否则的话,即使注册了这个KeyListner,也无法监听按键事件
由于代码很简单,大家可以自己试着写一下,我家里面没网,不方便给出代码~
真的是很奇怪,被这个问题搞了一个下午了,希望有高手能给解答一下
万分感谢!!

解决方案 »

  1.   

    KeyListener是对当前获得焦点的组件有效的
    你一个空的JPanel上面没有任何东西的时候
    焦点肯定默认在JPanel上,所以这个时候KeyListener可以生效但是你加了一个JButton之后,焦点到了JButton上面,
    所以你注册在JPanel上的KeyListener就不生效了
    而JPanel默认不会通过鼠标点击获得焦点,
    即使你点了JPanel之后,也无法让JPanel获得焦点
    所以你可以自己再给这个JPanel加一个MouseListener,
    使其可以通过鼠标点击获得焦点
      

  2.   

    this.setFocusable(true);一句话解决问题,我也苦恼了好长时间