import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.KeyEvent;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class ShortcutManager implements AWTEventListener {
// 使用单态模式
private static ShortcutManager instance = new ShortcutManager();
// 快捷键与事件处理对象键值对
private Map listeners;
// 某组件上发生了快捷键列表中的快捷键事件, 如果他的父组件在被忽略组件列表中, 则放弃这个事件.
private Set ignoredComponents;
// 保存键盘上键与它的ascii码对应
// 如果以某键的ascii码为下标, 数组中此下标的值为true, 说明此键被按下了.
// 当此键被释放开后, 数组中对应的值修改为false
privateboolean[]keys;
private ShortcutManager() {
keys = new boolean[256];
ignoredComponents = new HashSet();
listeners = new HashMap();
// 只关心键盘事件
Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.KEY_EVENT_MASK);
}
/**
* 有键盘事件发生
*/
public void eventDispatched(AWTEvent event) {
if (event.getClass() == KeyEvent.clas