私のコメントで既に述べたように、KeyEvents のアプリケーション グローバル インターセプト用に設計されたクラスはKeyEventDispatcherです。
KeyEventDispatcher は、現在の KeyboardFocusManager と連携して、すべての KeyEvent のターゲティングとディスパッチを行います。現在の KeyboardFocusManager に登録された KeyEventDispatcher は、ターゲットにディスパッチされる前に KeyEvents を受け取ります。これにより、各 KeyEventDispatcher は、イベントの再ターゲット、消費、イベント自体のディスパッチ、またはその他の変更を行うことができます。
したがって、タスクは、dispatch(KeyEvent) メソッドで必要なことを行うディスパッチャーを実装することです。次のようになります。
public class MyDispatcher implements KeyEventDispatcher {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (!e.isConsumed()) {
if (processMyStuff(e)) {
e.consume();
}
}
return false;
}
protected boolean processMyStuff(KeyEvent e) {
if (!isMyTrigger(e)) return false;
doMyStuff();
return true;
}
}
// usage:
KeyboardFocusManager.getCurrentKeyboardFocusManager()
.addKeyEventDispatcher(new MyDispatcher());
グローバル リスナーをツールキットに追加することで、いくつかの注意事項を守って目標を達成できることに注意してください。
- 原則として、特に正確な要件を満たすように設計されている場合は、作業に最も適したツールを使用してください。
- AWTEventListener は、セキュリティが制限されたコンテキストでは機能しない可能性があります