【问题标题】:How to get multiple selected values of MenuBar -VAADIN如何获取 MenuBar -VAADIN 的多个选定值
【发布时间】:2017-06-01 11:39:49
【问题描述】:

我正在使用 vaadin,我需要从菜单栏中选择的值并显示在标签中。我尝试了下面提到的一个示例代码。

final MenuBar menubar = new MenuBar();
layout.addComponent(menubar);

MenuBar.MenuItem beverages = menubar.addItem("Beverages", null, null);
Label selection = new Label("-");
layout.addComponent(selection);

MenuBar.Command mycommand = new MenuBar.Command() {

    public void menuSelected(MenuItem selectedItem) {
        selection.setValue("Ordered a " + selectedItem.getText() +
                           " from menu.");
    }
};
MenuBar.MenuItem hot_beverages = beverages.addItem("Hot", null, null);
hot_beverages.addItem("Tea", null, mycommand);
hot_beverages.addItem("Coffee", null, mycommand);
MenuBar.MenuItem cold_beverages =
        beverages.addItem("Cold", null, null);
cold_beverages.addItem("Milk", null, mycommand);

MenuBar.MenuItem snacks = menubar.addItem("Snacks", null, null);
snacks.addItem("Weisswurst", null, mycommand);
snacks.addItem("Salami", null, mycommand);

MenuBar.MenuItem services = menubar.addItem("Services", null, null);
services.addItem("Car Service", null, mycommand);
setContent(layout);

问题是,它只显示一个选定的项目。

如果我选择另一个项目,标签值将替换为最近选择的项目。我的要求是显示所有被选中的菜单项。

【问题讨论】:

标签: vaadin


【解决方案1】:

这在一定程度上取决于你真正需要做什么,但对于初学者来说,你必须做两件事:

  • 制作物品checkable(那些应该是的)
  • 跟踪选择的项目。对于下面的示例(从您的原始代码更新),我使用了一个列表,但您也可以执行 item.getParent().getChildren() 之类的操作并检查检查了哪些孩子

代码:

public class MultiSelectionMenu extends VerticalLayout {
    public MultiSelectionMenu() {
        final MenuBar menubar = new MenuBar();

        MenuBar.MenuItem beverages = menubar.addItem("Beverages", null, null);
        Label selection = new Label("-");
        addComponent(selection);

        MenuBar.Command selectionHandler = new MenuBar.Command() {
            private List<String> selectedItems = new ArrayList<>();

            public void menuSelected(MenuBar.MenuItem item) {
                if (item.isChecked()) {
                    selectedItems.add(item.getText());
                } else {
                    selectedItems.remove(item.getText());
                }
                selection.setValue("Ordered: " + Arrays.toString(selectedItems.toArray()));
            }
        };
        MenuBar.MenuItem hot_beverages = beverages.addItem("Hot", null, null);
        hot_beverages.addItem("Tea", null, selectionHandler).setCheckable(true);
        hot_beverages.addItem("Coffee", null, selectionHandler).setCheckable(true);
        MenuBar.MenuItem cold_beverages = beverages.addItem("Cold", null, null);
        cold_beverages.addItem("Milk", null, selectionHandler).setCheckable(true);

        MenuBar.MenuItem snacks = menubar.addItem("Snacks", null, null);
        snacks.addItem("Weisswurst", null, selectionHandler).setCheckable(true);
        snacks.addItem("Salami", null, selectionHandler).setCheckable(true);

        MenuBar.MenuItem services = menubar.addItem("Services", null, null);
        services.addItem("Car Service", null, selectionHandler).setCheckable(true);

        addComponent(menubar);
    }
}

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    相关资源
    最近更新 更多