无法重新映射“输入”的Swing键绑定

时间:2011-04-04 05:23:53

标签: swing scala key-bindings

我在scala程序中使用swing键绑定。我正在尝试捕获JPanel中的键输入。出于某种原因,我无法重新映射回车键。 shift-enter工作和其他键也可以工作。进入有什么特别之处?以下是我的JPanel的代码片段:

val ADD_SIBLING_TO_SELECTED = "add-sibling-to-selected"
val enter = KeyStroke.getKeyStroke("shift ENTER")//todo: figure out why plain enter does not work
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).remove(enter)
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(enter, ADD_SIBLING_TO_SELECTED)
import java.awt.event.ActionEvent
getActionMap().put(ADD_SIBLING_TO_SELECTED, new AbstractAction {
  override def actionPerformed(e: ActionEvent){
    println(ADD_SIBLING_TO_SELECTED)
  }
})

3 个答案:

答案 0 :(得分:2)

对于ENTER来说没有什么特别的,只是恰好是用于指示“就绪”的最常用的手势:-)所以有一个非零的概率,即ENTER可能已经绑定到其他地方。一个候选者可以是在框架的根窗格中注册的默认按钮。另请注意,WHEN_IN_FOCUSED_WINDOW类型绑定是最后一个要查询的。

CU 珍妮特

答案 1 :(得分:1)

奇怪;这适用于我的机器。尝试使用scala 2.8.1在mac os x 10.6.7上使用jdk 1.6.0_24进行完整代码:

object ShowKeyPress {
  def main(args: Array[String]) {
    import javax.swing._
    val frame = new JFrame
    frame.setVisible(true)
    frame.add(new JPanel {
      val ADD_SIBLING_TO_SELECTED = "add-sibling-to-selected"
      val enter = KeyStroke.getKeyStroke("ENTER")
      //todo: figure out why plain enter does not work
      getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).remove(enter)
      getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(enter, ADD_SIBLING_TO_SELECTED)

      import java.awt.event.ActionEvent

      getActionMap().put(ADD_SIBLING_TO_SELECTED, new AbstractAction {
        override def actionPerformed(e: ActionEvent) {
          println(ADD_SIBLING_TO_SELECTED)
        }
      })
    })
  }
}

答案 2 :(得分:0)

事实证明,我需要致电requestFocusInWindow()并使用WHEN_FOCUSED,一切正常。我仍然不确定为什么shift-enter工作但输入没有。感谢您的反馈!