java - 将标签文本值绑定(bind)到外部文件的 String 属性

标签 java javafx properties kotlin tornadofx

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

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

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

在我的边框 Pane 中,我引用了 testid

label.bind(testid)

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

编辑:

根据 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 正在调用该类来生成 View ,因此我无法调用 DirectWatcher.main()。我是否从其他 App 类中调用此对象?我很失落。

最佳答案

JavaFX 中没有允许此类绑定(bind)的内置机制,但您可以使用 Java 监视服务,如下所述: http://www.baeldung.com/java-nio2-watchservice Oracle 文档可以在这里找到: https://docs.oracle.com/javase/10/docs/api/java/nio/file/WatchService.html

关于java - 将标签文本值绑定(bind)到外部文件的 String 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51643892/

相关文章:

java - 如何在android中的数据库中添加多行?

java - JPA/toplink 异构实体列表

ios - 使用 KVO 更改属性时发送通知

css - JavaFX - 使用 setRowFactory 突出显示新行

JavaFX 创建透明径向渐变

java - Spring 4 属性文件不起作用

java - 在 java :comp/env? 中设置属性

java - 在Java中递归地对数字的数字进行排序

java - 声明这些变量在风格上最正确的方法是什么?

java - webView JavaFX 访问时重定向某个 URL