首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java swing JPanel KeyListener无响应解决办法

2014-01-23 
java swing JPanel KeyListener无响应解决方法div stylefont-size: 14px在做javaSwing开发的过程中,

java swing JPanel KeyListener无响应解决方法
<div style="font-size: 14px">
  在做javaSwing开发的过程中,如果将Jpanel作为画布,会发现KeyListener 的相关事件无任何响应。为什么会出现这种情况呢?
   是因为Jpanel在渲染完成后,无法获取focus,所以只要解决这个问题就行了。
   参考了网上很多人的解决方案,以及参考了java api的一些说明。
发现了一个方法的requestFocusInWindow,可在各种平台之间一致地实现获取焦点行为。
另外:
    实现了一种自我感觉较好的方法,使继承了Jpanel实体的类实现MouseMotionListener接口,在mouseMove方法中使用:
    boolean status = this.requestFocusInWindow();
来实时获取焦点。
下面我将我做的demo的实例贴在下面:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JPanel;

public class JPanelTest extends JPanel implements KeyListener, MouseMotionListener {

public JPanelTest() {
addKeyListener(this);
addMouseMotionListener(this);
}

public static void main(String[] args) {
Console.run(new JPanelTest(), 200, 200);

}

@Override
public void keyTyped(KeyEvent e) {
System.out.println("key keyTyped code:" + e.getKeyCode());

}

@Override
public void keyPressed(KeyEvent e) {
System.out.println("key pressed code:" + e.getKeyCode());

}

@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println("keyReleased code:" + e.getKeyCode());
}

@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseMoved(MouseEvent e) {
boolean status = this.requestFocusInWindow();
}

}

</div>

热点排行