我在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)
}
})
答案 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工作但输入没有。感谢您的反馈!