JavaFX 2.0选择框问题.如何在更新对象时更新表示对象列表的choic
发布时间:2020-12-15 00:37:16 所属栏目:Java 来源:网络整理
导读:我有一个表示列表对象的choiceBox.当代表其中一个对象的名称被另一位代码更改时,选择框的下拉列表中的名称不会更改.例如,如果我有一个由列表Test对象组成的选择框.测试代码如下所示: class Test { String name; public Test(String name) { this.name = nam
我有一个表示列表对象的choiceBox.当代表其中一个对象的名称被另一位代码更改时,选择框的下拉列表中的名称不会更改.例如,如果我有一个由列表Test对象组成的选择框.测试代码如下所示:
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; } } 然后选择Box如下: 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列表.我如何才能使它更新并显示列表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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – Spring 5 – 如何提供静态资源
- java – 当Optional不为空时,如何防止传递给Optional的orEl
- java – Spring-Boot:同时处理多个请求
- java – AlarmManager.AlarmClockinfo.getNextAlarmClock()
- java – Jersey JAX-RS实例注入
- Java解析Excel内容的方法
- java – 如何修改GlassFish中的Web环境条目4
- Java虚拟机JVM性能优化(一):JVM知识总结
- Java项目启动时执行指定方法的几种方式
- java – Spring Security AuthenticationCredentialsNotFou