gpt4 book ai didi

JavaFX:如何从其他类访问UI线程组件

转载 作者:行者123 更新时间:2023-12-02 05:34:41 25 4
gpt4 key购买 nike

我是 JavaFX 新手,我正在尝试执行以下操作:

我有带有 UI 的主类,重要的部分是

public class Main extends Application {

...

scene = new Scene(new Group());

final Label label = new Label("Device name");
label.setFont(new Font("Arial", 20));
label.setId("label");

DeviceConnector connector = new DeviceConnector(scene);
}

其他文件的类里面,我有一些链接的线程。如果每个成功(它们连接到蓝牙),则最后一个读取设备名称。这就是我想要在上面的标签上显示的内容。

不幸的是,我没有找到任何其他(相当优雅)的解决方案:

public class DeviceConnector {

Scene mScene;

public DeviceConnector(Scene scene) {

mScene = scene;
}

private void ReadDeviceName {

this.deviceName = device.GetName();

Platform.runLater(new Runnable() {

@Override
public void run() {

Label label = (Label) mScene.lookup("#label");
label.setText(deviceName);
}
});
}
}

是否有任何正确的方法来访问 JavaFX GUI 中的组件(例如中介模式)?

谢谢。

最佳答案

JavaFX 中的大多数元素都拥有一个可观察的属性,它表示值。对于标签,它是一个 textProperty(),您可以获取和编辑它。对该 StringProperty(这是 textProperty() 方法返回的类型)的所有编辑都将显示在相关标签中。

参见http://docs.oracle.com/javafx/2/api/javafx/scene/control/Labeled.html#textProperty%28%29

我建议采用一种方法来获取 StringProperty,将其作为 MVC 结构中的模型进行处理,并将其存储在全局可访问的模型存储库中。在您的逻辑线程中,获取设备名称并将结果写入模型(又名 StringProperty)中,您的标签将收到更改通知并显示获取的值。

关于JavaFX:如何从其他类访问UI线程组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25120357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com