【问题标题】:Dynamically Create Menu Items based on an Observable List基于可观察列表动态创建菜单项
【发布时间】:2017-05-07 23:08:31
【问题描述】:

我有一个 Playlist 类型的可观察列表。

我有一个下拉菜单(连接到MenuButton),列表中的每个项目都有一个MenuItem(加上一些我硬编码但不会更改的默认项目)。

对于TableView,我可以将数据链接到 ObservableList,并且表的行会根据列表的内容自动更新。

有没有办法对MenuButton 及其MenuItems 列表做同样的事情?

【问题讨论】:

    标签: java javafx


    【解决方案1】:

    我不确定是否有内置支持,但无论哪种方式,您都可以通过编写侦听器,根据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 - 此代码未经测试,因为我目前无权访问编译器。

    【讨论】:

    • 酷,我要试一试。我会告诉你进展如何,谢谢!
    • @JoshuaD 没问题,如果您需要更多帮助,请告诉我 :)
    猜你喜欢
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 2019-05-22
    • 2014-11-29
    • 1970-01-01
    • 2021-08-13
    • 2016-03-02
    相关资源
    最近更新 更多