<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>
在做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>