TornadoFX,Kotlin:将标签文本值绑定到外部文件的String属性

时间:2018-08-02 00:15:08

标签: java javafx properties kotlin tornadofx

我有一个要绑定到标签的外部文本文件,以便在修改外部文件值时,我的UI会自动更新字符串值。

到目前为止,我已经尝试过:

val testid: ObservableStringValue = SimpleStringProperty(File("src/.../test").readText())

在我的边框中,我引用了睾丸

label.bind(testid)

这将成功读取文件,但是当我编辑测试文件时,testid不会自动更新其值。我想尝试使用Handler()强制变量每秒更新一次值,但是我敢肯定有一种更聪明的方法可以使用Properties和.observable()将文件和Property绑定在一起。

编辑:

根据mipa的建议使用nio2,我在为计时器生成对象/类时遇到了麻烦:

object DirectoryWatcher {

    @JvmStatic  fun main(args:Array<String>) {
    val watchService = FileSystems.getDefault().newWatchService()
    val path = Paths.get(System.getProperty("src/pykotinterface/test"))

    path.register(
    watchService,
    StandardWatchEventKinds.ENTRY_CREATE,
    StandardWatchEventKinds.ENTRY_DELETE,
    StandardWatchEventKinds.ENTRY_MODIFY)

    val key:WatchKey = watchService.take()
    while (key != null) {
    for (event in key.pollEvents()) {
    println(
            "Event kind:" + event.kind()
            + ". File affected: " + event.context() + ".")
            }
    key.reset()
            }
        }
    }

如何调用此对象以运行-它当前位于View()类中,TornadoFX正在调用该类以生成视图,因此无法调用DirectWatcher.main()。我是否可以从其他App类中对此对象进行调用?我很迷茫。

1 个答案:

答案 0 :(得分:2)

JavaFX中没有允许这种绑定的内置机制,但是您可以按照以下说明使用Java监视服务: http://www.baeldung.com/java-nio2-watchservice 可以在以下位置找到Oracle文档: https://docs.oracle.com/javase/10/docs/api/java/nio/file/WatchService.html