按ESC键退出Frame,是个快捷的操作方式,我该如何实现,要求如下:
1、当有多个Frame时,只有处于激活状态的Frame才退出,其他的都不影响
2、我用了KeyboardFocusManager这个类,捕捉键盘动作,可是捕捉的是所有键盘动作,而不是当前激活Frame的键盘动作,比如说,先加载Frm1 ,再加载Frm2,那么按ESC键时,即时Frm2 处于激活状态,也是Frm1退出,而Frm2没有反应
3、不知道是不是KeyboardFocusManager没用好,有没有其他的实现办法?
1、当有多个Frame时,只有处于激活状态的Frame才退出,其他的都不影响
2、我用了KeyboardFocusManager这个类,捕捉键盘动作,可是捕捉的是所有键盘动作,而不是当前激活Frame的键盘动作,比如说,先加载Frm1 ,再加载Frm2,那么按ESC键时,即时Frm2 处于激活状态,也是Frm1退出,而Frm2没有反应
3、不知道是不是KeyboardFocusManager没用好,有没有其他的实现办法?
解决方案 »
- emma统计覆盖率时报错:RPC failure while executing [coverage.get]
- 请教各位大侠Java 7的try block-with-resource和之前的try有什么不同?
- 关于面板显示特效的问题
- 在线等候,解决立刻给分!!童叟无欺!!!
- 关于java语言生成jpg图片的问题
- JPanel得到焦点了为什么不能捕捉 Key 事件呢?
- 飞利浦官方网站提供的免费短信服务!
- 请问如何得到一个JAR文件里的文件信息
- 新手上路:能多个组件共用一个事件适配器嘛?
- 十万火急,求教关于JBuilder4.0及JDK2.0的好的参考书
- 一个jar包中有多个.class文件,如何知道哪个文件包含main函数?
- 有空的朋友都进来帮看看这问题
用dispose可以2.把Frm2隐藏行不?
Frm2.setVisiable(false);
public void keyPressed(KeyEvent event)
{
if(event.getKeyCode()==KeyEvent.VK_ESCAPE)
......
});
这绝对OK~addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() == KeyEvent.VK_ESCAPE) {
dispose(); //退出
}
}
});
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;import javax.swing.*;
public class T {
public static void main(String[] args) {
JFrame f = new JFrame();
f.getContentPane().setLayout(new FlowLayout());
f.getContentPane().add(new JTextField(10));
f.setSize(300, 300);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setVisible(true); JFrame f1 = new JFrame();
f1.getContentPane().add(new JButton("Test"));
f1.setSize(300, 300);
f1.setLocationRelativeTo(null);
f1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f1.setVisible(true);
addCloseAction(f);
addCloseAction(f1);
} private static void addCloseAction(final JFrame f) {
Action disposeAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
f.dispose();
}
};
JComponent comp = f.getRootPane();
comp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, true), "DisposeFrame");
comp.getActionMap().put("DisposeFrame", disposeAction);
}
}