在整个应用程序上全局捕获键盘组合以在Java中显示隐藏的JDialog

在整个应用程序上全局捕获键盘组合以在Java中显示隐藏的JDialog,java,swing,global,keyboard-events,Java,Swing,Global,Keyboard Events,我将在我的应用程序中创建一个隐藏对话框,通过键盘组合(例如,五个顺序Ctrl+Shift+I)可以看到该对话框。 如何在整个应用程序上全局捕获键盘组合笔划 “谢谢”是一个示例,展示了如何在这种情况下使用操作。您可以替换KeyEvent.VK_I和相关的击键修饰符。您的动作监听器可以记录它被触发的频率。是一个示例,展示了如何在这种情况下使用动作。您可以替换KeyEvent.VK_I和相关的击键修饰符。您的操作侦听器可以记录它被触发的频率。我通过定义一个DispatcherListener解决了这个

我将在我的应用程序中创建一个隐藏对话框,通过键盘组合(例如,五个顺序Ctrl+Shift+I)可以看到该对话框。
如何在整个应用程序上全局捕获键盘组合笔划


“谢谢”

是一个示例,展示了如何在这种情况下使用
操作。您可以替换
KeyEvent.VK_I
和相关的
击键
修饰符。您的动作监听器可以记录它被触发的频率。

是一个示例,展示了如何在这种情况下使用
动作。您可以替换
KeyEvent.VK_I
和相关的
击键
修饰符。您的操作侦听器可以记录它被触发的频率。

我通过定义一个
DispatcherListener解决了这个问题:

class DispatcherListener implements KeyEventDispatcher{
    private int level=0;

    public boolean dispatchKeyEvent(KeyEvent e) {
        if(e.getID() == KeyEvent.KEY_RELEASED){
            if(e.isControlDown() && e.isShiftDown()){
                if(this.level==0 && e.getKeyCode()==KeyEvent.VK_S){
                    level++;
                }else if(this.level==1 && e.getKeyCode()==KeyEvent.VK_H){
                    level++;
                }else if(this.level==2 && e.getKeyCode()==KeyEvent.VK_O){
                    level++;
                }else if(this.level==3 && e.getKeyCode()==KeyEvent.VK_W){
                    level=0;
                    this.showHiddenWindow((JFrame)SwingUtilities.getRoot(e.getComponent()));
                }else{
                    level=0;
                }

                //System.out.println( "level: " +  level );
            }
        }
        return false;
    }
并将其用作:

    KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
    manager.addKeyEventDispatcher( new DispatcherListener());

谢谢大家

我通过定义一个
DispatcherListener
解决了这个问题:

class DispatcherListener implements KeyEventDispatcher{
    private int level=0;

    public boolean dispatchKeyEvent(KeyEvent e) {
        if(e.getID() == KeyEvent.KEY_RELEASED){
            if(e.isControlDown() && e.isShiftDown()){
                if(this.level==0 && e.getKeyCode()==KeyEvent.VK_S){
                    level++;
                }else if(this.level==1 && e.getKeyCode()==KeyEvent.VK_H){
                    level++;
                }else if(this.level==2 && e.getKeyCode()==KeyEvent.VK_O){
                    level++;
                }else if(this.level==3 && e.getKeyCode()==KeyEvent.VK_W){
                    level=0;
                    this.showHiddenWindow((JFrame)SwingUtilities.getRoot(e.getComponent()));
                }else{
                    level=0;
                }

                //System.out.println( "level: " +  level );
            }
        }
        return false;
    }
并将其用作:

    KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
    manager.addKeyEventDispatcher( new DispatcherListener());

谢谢大家

你们知道很多键盘会因为同时按下两个以上的修改键而窒息,对吧?@thkala:不,我不知道!我从没见过这样的情况!但是修饰符的数量对我来说并不重要!我只需要一个连续按多次的组合(即使是5个Ctrl+a也是可以接受的!)你知道很多键盘会因为同时按下两个以上的修改键而窒息,对吧?@thkala:不,我不知道!我从没见过这样的情况!但是修饰符的数量对我来说并不重要!我只需要一个组合,可以连续按多次(即使按5次Ctrl+a也是可以接受的!)