java-org.hwo.ui/src/org/hwo/ui/KeyStrokeHelper.java

95 lines
2.1 KiB
Java

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<KeyStrokeListener> keystrokeListeners;
JComponent component;
JFrame frame;
private boolean focusedWindow;
public KeyStrokeHelper(JComponent component)
{
keystrokeListeners = new ArrayList<KeyStrokeListener>();
this.component = component;
focusedWindow = false;
}
public KeyStrokeHelper(JFrame frame)
{
keystrokeListeners = new ArrayList<KeyStrokeListener>();
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;
}
}