我是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中的组件(类似Mediator模式)?
谢谢。
答案 0 :(得分:2)
JavaFX中的大多数元素都有一个可观察的属性,它表示值。
如果是标签,则为textProperty()
,您可以对其进行提取和编辑。对StringProperty
(由textProperty()
方法返回的类型)的所有修改都将显示在相关标签中。
请参阅http://docs.oracle.com/javafx/2/api/javafx/scene/control/Labeled.html#textProperty%28%29
我建议使用获取StringProperty的方法,将其作为MVC结构中的模型处理,并将其存储在全局可访问的模型存储库中。 在您的逻辑线程中,获取设备名称并将结果写入模型aka StringProperty,您的标签将通过更改通知并显示获取的值。