gpt4 book ai didi

JavaFX 2.0 选择框问题。更新对象时如何更新表示对象列表的选择框?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:16 27 4
gpt4 key购买 nike

我有一个代表列表对象的选择框。当表示其中一个对象的名称被另一段代码更改时,选择框下拉列表中的名称不会更改。例如,如果我有一个由列表测试对象组成的选择框。测试代码如下:

class Test {
String name;

public Test(String name) {
this.name = name;
}

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}

@Override
public String toString() {
return name;
}
}

然后有一个选择框如下:

ChoiceBox<Test> chi = new ChoiceBox<>();
ObservableList<Test> items = FXCollections.observableArrayList();
chi.setItems(items);
items.addAll(new Test("ITEM1"),new Test("ITEM2"),new Test("ITEM3"));

ChoiceBox 将显示列表 ITEM1、ITEM2 和 ITEM3

如果我随后通过以下代码更改其中一项的名称:

items.get(1).setName("CHANGED");

ChoiceBox 仍会显示列表 ITEM1、ITEM2 和 ITEM3。我怎样才能使 choiceBox 更新并显示列表 ITEM1、CHANGED 和 ITEM3?

最佳答案

只是为了完整性 - 在 fx2 中你可能会遇到 replace approach如另一个答案中所述。从 fx8 开始,有一种机制告诉列表监听其包含的项目的变化(前提是,当然,你的项目有属性并在变化时通知监听器):

/** changed item to 
* - use property and notify on change
* - not override toString (for visuals, use converter instead)
*/
class Test {
StringProperty name;

public Test(String name) {
setName(name);
}

public StringProperty nameProperty() {
if (name == null) name = new SimpleStringProperty(this, "name");
return name;
}
public void setName(String name) {
nameProperty().set(name);
}

public String getName() {
return nameProperty().get();
}

}

// use in collection with extractor
ObservableList<Test> items = FXCollections.observableList(
e -> new Observable[] {e.nameProperty()} );
items.addAll(...);
choiceBox = new ChoiceBox<>(items);
// tell the choice how to represent the item
StringConverter<Test> converter = new StringConverter<Test>() {

@Override
public String toString(Test album) {
return album != null ? album.getName() : null;
}

@Override
public Test fromString(String string) {
return null;
}

};
choiceBox.setConverter(converter);

关于JavaFX 2.0 选择框问题。更新对象时如何更新表示对象列表的选择框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21854146/

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