`
kevonwang
  • 浏览: 1744 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java swing JPanel KeyListener无响应解决方法

阅读更多
<div class="iteye-blog-content-contain" 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>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics