我正在开发一个具有许多不同窗口/框架/窗格/标签的大型应用程序,其中许多可能随时打开。需求调用一些热键,这些热键将焦点放在某个窗口中的某个选项卡上。我想避免为每个可能具有焦点的窗口/组件注册KeyListener;因此,我尝试了以下
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher(){
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getKeyChar() == '-'){
doTheThing();
return false;
}
return false;
}
});
第一个“return false”允许该角色进入其他可能的消费者,例如文本输入字段。问题是代码仍然会触发,并且会将用户拉回到相关选项卡(如果它是同一窗口中的另一个选项卡,则可能会将其从正在执行的操作中拉出来。)
有没有办法让这个代码全局触发,除非它否则会进入文本面板? (也许是一种添加处理程序的方法,它将“最后”而不是“第一” - 所以它只会在没有其他东西消耗该事件的情况下触发?)
我对UI设计很陌生,如果这是一个愚蠢的问题,请致以道歉,并提前感谢您的帮助。
答案 0 :(得分:3)
尝试使用Intel manual并确定它是JTextComponent
还是不是......
if (!(KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() instanceof JTextComponent)) {
//...
}
或其他一些