Я экспериментирую с небольшим количеством Scala gui программирующий (мой первый проект в scala, таким образом, я думал, что запущу с чего-то простого). Но я, кажется, упорно продолжил что-то, что кажется, что должно быть относительно тривиально. У меня есть класс, который расширяет scala.swing. MainFrame, и я хотел бы обнаружить, когда пользователь нажимает клавишу, когда то окно фокусируется. Забавная вещь, я, кажется, не могу найти любой способ заставить то событие стрелять.
Я нашел пример того, как кто-то еще имел вокруг проблемы здесь: http://houseofmirrors.googlecode.com/svn/trunk/src/src/main/scala/HouseGui.scala, но они, кажется, вернулись к использованию Java Swing API, который немного неутешителен. Кто-либо знает, существует ли более идиоматический способ прервать события?
Для решения этой проблемы мне потребовалось сделать следующее:
class MyFrame extends MainFrame {
this.peer.addKeyListener(new KeyListener() {
def keyPressed(e:KeyEvent) {
println("key pressed")
}
def keyReleased(e:KeyEvent) {
println("key released")
}
def keyTyped(e:KeyEvent) {
println("key typed")
}
})
}
Однако это сработало, только если к этому компоненту или его дочерним компонентам не было прикреплено никаких объектов кнопок.
Я полагаю, вам нужно прослушать this.keys
(где this
- элемент GUI, получающий события клавиатуры). См. Эквивалентный вопрос о событии мыши .