【问题标题】:Java swing keybindingJava摇摆键绑定
【发布时间】:2013-06-27 13:04:57
【问题描述】:

这是在 JPanel 的构造函数中,但是当我按“h”时它不会打印任何内容。如果需要更多代码,我可以提供。谢谢!

String hide = "hide";
    this.getInputMap().put(KeyStroke.getKeyStroke('h'), hide);
    this.getActionMap().put(hide, new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent e) {
                System.out.println("HIDDEN");
            if (isHidden){
                slide.setVisible(true);
            }else{
                slide.setVisible(false);
            }
        }
    });

【问题讨论】:

  • 顺便说一句,你只能使用slide.setVisible(isHidden);,如果我没有弄错或者当祖先时,你可以使用`getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)'
  • 我不确定我是否遵循。 slide.setVisible(true/false) 据我所知效果很好。
  • 你可以用一行代码的 if/else 语句来做同样的事情。
  • 啊,我明白你在说什么。如何在没有 if/else 的情况下告诉布尔值切换到相反的值?
  • 切换你可以使用的状态:slide.setVisible( ! slide.isVisible() );

标签: java swing jpanel action key-bindings


【解决方案1】:
this.getInputMap()....

您正在尝试将绑定添加到默认 InputMap,即当组件具有焦点时的 InputMap。默认情况下,JPanel 没有焦点。

您应该通过getInputMap(int) 方法尝试使用其他 InputMap 之一。或者您需要使面板具有焦点并赋予它焦点。

阅读How to Use Key Bindings 上的 Swing 教程,了解有关用于指定所需 InputMap 的正确变量的更多信息。

【讨论】:

  • 谢谢! WHEN_IN_FOCUSED_WINDOW 工作得很好。有什么我可以用它代替的东西,即使窗口没有聚焦它也能工作?我的应用程序设置为始终位于顶部,因此它始终可见,但不一定是焦点。谢谢!
  • 没有。 Swing 仅在获得焦点时才响应事件。
  • 我不知道。应用程序接管你的屏幕是不好的。
猜你喜欢
  • 2018-07-14
  • 1970-01-01
  • 2011-06-26
  • 2012-04-20
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
  • 2014-04-19
相关资源
最近更新 更多