【发布时间】:2017-05-07 23:08:31
【问题描述】:
我有一个 Playlist 类型的可观察列表。
我有一个下拉菜单(连接到MenuButton),列表中的每个项目都有一个MenuItem(加上一些我硬编码但不会更改的默认项目)。
对于TableView,我可以将数据链接到 ObservableList,并且表的行会根据列表的内容自动更新。
有没有办法对MenuButton 及其MenuItems 列表做同样的事情?
【问题讨论】:
我有一个 Playlist 类型的可观察列表。
我有一个下拉菜单(连接到MenuButton),列表中的每个项目都有一个MenuItem(加上一些我硬编码但不会更改的默认项目)。
对于TableView,我可以将数据链接到 ObservableList,并且表的行会根据列表的内容自动更新。
有没有办法对MenuButton 及其MenuItems 列表做同样的事情?
【问题讨论】:
我不确定是否有内置支持,但无论哪种方式,您都可以通过编写侦听器,根据ObservableList 为您想要的任何元素编写一个包装器。例如,
public class BoundMenuButton extends MenuButton {
ObservableList<MenuItem> items;
public BoundMenuButton(items) {
super(); // Not sure if needed
this.items = items;
// Listen for changes
items.addListener((ListChangeListener.Change<? extends MenuItem> change) -> {
updateItems();
});
}
public void updateItems() {
Platform.runLater( () -> {
// Do updates
});
}
}
这只是最基本的。您可以很容易地将其扩展为具有与TableView 相同的方法。 (getItems()、setItems() 等)。
P.S - 此代码未经测试,因为我目前无权访问编译器。
【讨论】: