forked from LupusNobilis/java-org.hwo.ui
95 lines
2.1 KiB
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;
|
|
}
|
|
|
|
}
|