java - 基于可观察列表动态创建菜单项

标签 java javafx

我有一个类型为“播放列表”的可观察列表。

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

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

有没有办法对 MenuButton 及其 MenuItem 列表执行相同的操作?

最佳答案

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

关于java - 基于可观察列表动态创建菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43837663/

相关文章:

java - 在 Spring Controller 中使用 JSON Patch 时出现 HttpMessageNotReadableException

java - TreeMap 的数据发生了奇怪的变化

java - SpringMVC 如何在应用程序启动时启动线程

java - 位图缩略图的延迟加载列表

javafx JFXPanel嵌入在mac中的swing应用程序崩溃

java - 在 JavaFX 的 ImageView 中显示文件的图标图像

java - 如何修复 Java UnsupportedClassVersionError

JavaFX Canvas 重绘不执行任何操作

java - 是否可以在不重新读取的情况下多次添加从 FXML 文件加载的组件?

java - 在 JavaFX TextArea 中突出显示字符串