Проблемы со слушателем нажатия клавиш TornadoFX - PullRequest
0 голосов
/ 16 сентября 2018

Когда я запускаю следующий код

fun main(args: Array<String>) {
    Application.launch(HelloWorldApp::class.java, *args)
}

class HelloWorldApp : App(HelloWorld::class)

class HelloWorld : View() {
    override val root = hbox {
        addEventFilter(KeyEvent.ANY) { event ->
            println("pressed:"+event.character)
        }
    }
}

Когда я нажимаю какие-либо клавиши на клавиатуре, println () никогда не вызывается. Я что-то пропустил?

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

В поисках аналогичной проблемы я придумал это, которое выглядит проще, но я пока не понимаю каких-либо тонких различий между использованием управления с клавиатуры и явным запросом фокуса.

import javafx.scene.input.KeyEvent
import tornadofx.*

fun main(args: Array<String>) {
    launch<HelloWorldApp>(args)
}

class HelloWorldApp : App(HelloWorld::class)

class HelloWorld : View() {
    override val root = hbox {
        keyboard {
            addEventHandler(KeyEvent.KEY_PRESSED) { println(it.code) }
        }
    }
}
0 голосов
/ 16 сентября 2018

Простое добавление HBox не дает ему фокуса, а когда у него нет фокуса, он не получит ключевые события.Вы должны переопределить onDock и добавить слушателя вместо currentScene.Если вам действительно нужно добавить слушателя на HBox, добавьте слушателя и запросите фокус, как только представление будет закреплено:

fun main(args: Array<String>) {
    launch<HelloWorldApp>(args)
}

class HelloWorldApp : App(HelloWorld::class)

class HelloWorld : View() {
    override val root = hbox {
        addEventFilter(KeyEvent.ANY) { event ->
            println("pressed:" + event.character)
        }
    }

    override fun onDock() {
        root.requestFocus()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...