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>
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值