package org.hwo.ui; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.KeyStroke; public class KeyStrokeHelper { private class KeyStrokeActionListener implements ActionListener { int keycode; public KeyStrokeActionListener(int keycode) { this.keycode = keycode; } @Override public void actionPerformed(ActionEvent e) { fireKeyStroke(keycode); } } ArrayList keystrokeListeners; JComponent component; JFrame frame; private boolean focusedWindow; public KeyStrokeHelper(JComponent component) { keystrokeListeners = new ArrayList(); this.component = component; focusedWindow = false; } public KeyStrokeHelper(JFrame frame) { keystrokeListeners = new ArrayList(); this.frame = frame; this.component = frame.getRootPane(); this.focusedWindow = true; } public KeyStrokeHelper addKeyCode(int keyCode) { int focused; if (focusedWindow) focused = JComponent.WHEN_IN_FOCUSED_WINDOW; else focused = JComponent.WHEN_FOCUSED; component.registerKeyboardAction(new KeyStrokeActionListener(keyCode), KeyStroke.getKeyStroke(keyCode, 0), focused); return this; } public void removeKey(int keyCode) { if (focusedWindow) frame.getRootPane().unregisterKeyboardAction(KeyStroke.getKeyStroke(keyCode, 0)); else component.unregisterKeyboardAction(KeyStroke.getKeyStroke(keyCode, 0)); } public void registerKeyStrokeListener(KeyStrokeListener listener) { keystrokeListeners.add(listener); } public void removeKeyStrokeListener(KeyStrokeListener listener) { keystrokeListeners.remove(listener); } private void fireKeyStroke(int keyCode) { for (KeyStrokeListener listener:keystrokeListeners) listener.keyStroke(new KeyStrokeParameters(keyCode)); } public boolean isFocusedWindow() { return focusedWindow; } public void setFocusedWindow(boolean focusedWindow) { this.focusedWindow = focusedWindow; } }