如何更新JAVA FX元素(标签、列表等),这些元素显示更新对象的属性

如何更新JAVA FX元素(标签、列表等),这些元素显示更新对象的属性,java,javafx,observable,Java,Javafx,Observable,我有一个名为GameCharacter的类,它有一个存储为字符串的“名称”。我在我的控制器类中有一个名为executing character的对象实例化。正在更新这个执行字符 当这个对象更新时,我希望我的UI也相应地更新。例如,显示播放器名称的标签应该更改 这是我的课程大纲 public class GameController implements Initializable { private GameCharacter executingCharater; @FXML

我有一个名为GameCharacter的类,它有一个存储为字符串的“名称”。我在我的控制器类中有一个名为executing character的对象实例化。正在更新这个执行字符

当这个对象更新时,我希望我的UI也相应地更新。例如,显示播放器名称的标签应该更改

这是我的课程大纲

public class GameController implements Initializable {

    private GameCharacter executingCharater;

    @FXML
    private Label playernamelabel;

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {

        playernamelabel = new Label();

    }

如何动态更新UI以适应控制器中不断变化的对象

我知道Observer模式,但我在试图将标准实现融入JavaFX项目时迷失了方向

从中,可以将值绑定到标签

// where valueProperty is a string that holds the value of your label
playernamelabel = new Label("Start");
playernamelabel.textProperty().bind(valueProperty);

从中,可以将值绑定到标签

// where valueProperty is a string that holds the value of your label
playernamelabel = new Label("Start");
playernamelabel.textProperty().bind(valueProperty);


尝试绑定字符名属性和标签文本属性

下面的代码片段:

公共类游戏角色{
私有最终StringProperty名称=新SimpleStringProperty();
公共游戏角色(){
setName(“默认名称”);
}
公共字符串属性nameProperty(){
返回名称;
}
public void setName(最终字符串值){
nameProperty().set(值);
}
公共字符串getName(){
返回nameProperty().get();
}
}
public类BindingApp扩展应用程序{
专用最终标签labelCharName=新标签();
私有最终GameCharacter GameCharacter=新GameCharacter();
公共静态void main(最终字符串[]args){
应用程序启动(args);
}
@凌驾
public void start(final Stage primaryStage)引发异常{
设置场景(新场景(新VBox(labelCharName),300200));
labelCharName.textProperty().bind(gameCharacter.nameProperty());
primaryStage.show();
mockName();
}
公共名称(){
gameCharacter.setName(“新名称”);
}
}

尝试绑定字符名属性和标签文本属性

下面的代码片段:

公共类游戏角色{
私有最终StringProperty名称=新SimpleStringProperty();
公共游戏角色(){
setName(“默认名称”);
}
公共字符串属性nameProperty(){
返回名称;
}
public void setName(最终字符串值){
nameProperty().set(值);
}
公共字符串getName(){
返回nameProperty().get();
}
}
public类BindingApp扩展应用程序{
专用最终标签labelCharName=新标签();
私有最终GameCharacter GameCharacter=新GameCharacter();
公共静态void main(最终字符串[]args){
应用程序启动(args);
}
@凌驾
public void start(final Stage primaryStage)引发异常{
设置场景(新场景(新VBox(labelCharName),300200));
labelCharName.textProperty().bind(gameCharacter.nameProperty());
primaryStage.show();
mockName();
}
公共名称(){
gameCharacter.setName(“新名称”);
}
}

在我的控制器中推荐一个observer子类,这是最直接的方法吗?注意:您覆盖了fxml注入的字段!因此,您可能会在不同的实例上工作,这可能会带来很多麻烦。所以不要:永远不要实例化一个被注入的字段(就像在真的永远不要!)在我的控制器中推荐一个观察者子类,这是最直接的方法吗?注意:你覆盖了一个被fxml注入的字段!因此,您可能会在不同的实例上工作,这可能会带来很多麻烦。所以不要:永远不要实例化一个被注入的字段(就像在really-really-never中一样!)使用bind()会假定绑定的内容是可观察的吗?这意味着我需要使我的PlayerCharacter类可见?使用bind()是否假定我绑定的任何东西都是可见的?意思是我需要让我的PlayerCharacter类可见?