如何通过按ESC键,退出本Frame? 按ESC键,退出Frame,这是一个很方便快捷的用户操作,我现在用的是一种很笨的方法,就是在每个JText、JButton等添加一个KeyListener,如果JText不多还好,如果有十几个JText、JButton,那不是每个都要添加KeyListener?太麻烦了,有没有什么好办法吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 // ESCTest.javapackage com.boco.test;import java.awt.KeyboardFocusManager;import javax.swing.JFrame;public class ESCTest extends JFrame { /** * Launch the application * * @param args */ public static void main(String args[]) { try { ESCTest frame = new ESCTest(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } /** * Create the frame */ public ESCTest() { super(); setTitle("Press ESC TO Exit"); setBounds(100, 100, 500, 375); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // KeyboardFocusManager manager = KeyboardFocusManager .getCurrentKeyboardFocusManager(); manager.addKeyEventPostProcessor(new MyKeyEventPostProcessor()); }}// MyKeyEventPostProcessor.javapackage com.boco.test;import java.awt.KeyEventPostProcessor;import java.awt.event.KeyEvent;public class MyKeyEventPostProcessor implements KeyEventPostProcessor { public boolean postProcessKeyEvent(KeyEvent event) { if (KeyEvent.VK_ESCAPE == event.getKeyCode()) { System.exit(0); } return true; }} 太麻烦了实现Action接口即可,将ESC与界面上的“退出”按钮联系起来假设“退出”按钮是cancelButtoncancelButton.getInputMap(JButton.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "CLICK");cancelButton.getActionMap().put("CLICK", this); 你的必须在cancelButton得到焦点到时候才起作用的。我的不论何时都起作用的 用拦截器。拦截到了esc事件就cloes当前的frame bovy(蓝狐狸)确实是任何焦点都可以zhouqi724(如花姑娘)没试过,等会儿去试试,如果要获得焦点才行,就没意思了,那100个控件,不是要100个焦点?另外bovy(蓝狐狸)的我改了一下: public void frmExitWithVK_ESC(Window frame) { KeyboardFocusManager manager = KeyboardFocusManager .getCurrentKeyboardFocusManager(); manager.addKeyEventPostProcessor(new MyKeyEventPostProcessor(frame)); } class MyKeyEventPostProcessor implements KeyEventPostProcessor { Window frame; private MyKeyEventPostProcessor(Window f) { frame = f; } public boolean postProcessKeyEvent(KeyEvent ke) { if (ke.getKeyCode() == KeyEvent.VK_ESCAPE) frame.dispose(); return true; }; }把这个方法放在一个ToolsClass里,然后ToolsClass tc = new ToolsClass();tc.frmExitWithVK_ESC(this);两行代码就搞定了这个复杂的操作,呵呵! 大家帮我看看这段代码是怎么回事! java写教务管理系统SQL2000求高手指点 为什么插入数据不成功 大哥帮我写段代码吧 java数据类型 请教:使用批处理文件启动java应用程序后如何自动关闭命令窗口 字符串中有回车,怎么把它改为空格 入门问题 请问哪位大侠有能把法语翻译成汉语的软件(不用通过网络连接,因为我很少能上网)? 关于java读取文件流时遇见反斜杠的问题 如何解决这个空NullPointerException? 求原代码,立即结贴:读一个文件夹中所有文件,并得到所有文件总行数,文件名未知。
package com.boco.test;import java.awt.KeyboardFocusManager;
import javax.swing.JFrame;public class ESCTest extends JFrame {
/**
* Launch the application
*
* @param args
*/
public static void main(String args[]) {
try {
ESCTest frame = new ESCTest();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* Create the frame
*/
public ESCTest() {
super();
setTitle("Press ESC TO Exit");
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//
KeyboardFocusManager manager = KeyboardFocusManager
.getCurrentKeyboardFocusManager();
manager.addKeyEventPostProcessor(new MyKeyEventPostProcessor());
}
}
// MyKeyEventPostProcessor.java
package com.boco.test;import java.awt.KeyEventPostProcessor;
import java.awt.event.KeyEvent;public class MyKeyEventPostProcessor implements KeyEventPostProcessor {
public boolean postProcessKeyEvent(KeyEvent event) {
if (KeyEvent.VK_ESCAPE == event.getKeyCode()) {
System.exit(0);
}
return true;
}
}
实现Action接口即可,将ESC与界面上的“退出”按钮联系起来
假设“退出”按钮是cancelButtoncancelButton.getInputMap(JButton.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "CLICK");
cancelButton.getActionMap().put("CLICK", this);
我的不论何时都起作用的
拦截到了esc事件就cloes当前的frame
zhouqi724(如花姑娘)没试过,等会儿去试试,如果要获得焦点才行,就没意思了,那100个控件,不是要100个焦点?
另外bovy(蓝狐狸)的我改了一下:
public void frmExitWithVK_ESC(Window frame) {
KeyboardFocusManager manager = KeyboardFocusManager
.getCurrentKeyboardFocusManager();
manager.addKeyEventPostProcessor(new MyKeyEventPostProcessor(frame));
} class MyKeyEventPostProcessor implements KeyEventPostProcessor {
Window frame; private MyKeyEventPostProcessor(Window f) {
frame = f;
} public boolean postProcessKeyEvent(KeyEvent ke) {
if (ke.getKeyCode() == KeyEvent.VK_ESCAPE)
frame.dispose();
return true;
};
}把这个方法放在一个ToolsClass里,然后
ToolsClass tc = new ToolsClass();
tc.frmExitWithVK_ESC(this);
两行代码就搞定了这个复杂的操作,呵呵!