Не удалось переназначить привязку Swing-ключа для "enter" - PullRequest
0 голосов
/ 04 апреля 2011

Я использую привязки клавиш в программе Scala. Я пытаюсь захватить ввод ключа в JPanel. По какой-то причине я не могу переназначить клавишу ввода. Shift-Enter работает и другие ключи работают также. Что особенного в 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 ]

2 голосов
/ 04 апреля 2011

Ничего особенного для ENTER как такового, только наиболее часто используемый жест для указания «готов» :-) Так что существует ненулевая вероятность того, что ENTER может быть уже связан где-то еще.Одним из кандидатов может быть кнопка по умолчанию, зарегистрированная в корневой панели фрейма.Также обратите внимание, что привязка типа WHEN_IN_FOCUSED_WINDOW является самой последней из запрашиваемых.

CU Jeanette

1 голос
/ 04 апреля 2011

Странно;это работает на моей машине.Пробовал это с этим полным кодом на 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)
        }
      })
    })
  }
}
0 голосов
/ 06 мая 2011

Оказывается, мне нужно было позвонить requestFocusInWindow() и использовать WHEN_FOCUSED, и все заработало.Я до сих пор не уверен, почему shift-enter сработал, а enter - нет.Спасибо за отзыв!

...