TornadoFX 按键监听器问题

TornadoFX key press listener issues

当我运行下面的代码

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()。我错过了什么吗?

简单地添加一个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()
    }
}

为了寻找类似的问题,我想到了这个,它看起来更简单,但我还不明白使用键盘控制与显式请求焦点之间可能存在的任何细微差别。

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) }
        }
    }
}