您的位置:首页 > 其它

Dialog里监听ESC按键事件

2012-06-21 07:04 465 查看
一个JDialog,焦点在任何控件上的时候,当ESC按键或其他键事件发生时,想关闭这个窗口,或者激活别的事件的方法。在直接用JDialog时,用addKeyListener方法添加对键盘事件的监听,发现现不能监听到ESC事件。这里继承JDialog 覆盖父类的createRootPane()方法,添加对键盘ESC的监听。当然也可以实现对其他键盘的监听。

示例代码如下:

package com.michaelx.swing.dlg;

import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JRootPane;
import javax.swing.KeyStroke;

/**
*@author mengke
*@email wqjsir@foxmail.com
*@version 1.0
*@date  2011-10-22 上午12:23:36
*@project myswing
*/
public  class EscapeDialog extends JDialog {

private static final long serialVersionUID = 1L;

public EscapeDialog(Dialog d){
super(d);
}

public EscapeDialog(Window w){
super(w);
}

/**
* 覆盖父类的方法。实现自己的添加了ESCAPE键监听
*/
@Override
protected JRootPane createRootPane(){
KeyStroke  stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0);
JRootPane rootPane = new JRootPane();
rootPane.registerKeyboardAction(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
escapeKeyProc();
}
},stroke, JComponent.WHEN_IN_FOCUSED_WINDOW);

return rootPane;
}

/**
* 处理ESCAPE按键。子类可以重新覆盖该方法,实现自己的处理方式。
*/
protected  void escapeKeyProc(){
setVisible(false);
}

public static void main(String[] args){
EscapeDialog dlg = new EscapeDialog(null);
dlg.setSize(new Dimension(200,300));
dlg.setVisible(true);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: