以编程方式取消选中 Vaadin 上下文菜单中的复选框

sch*_*kar 2 checkbox contextmenu vaadin vaadin-flow

我创建了一个具有树结构的上下文菜单(添加了菜单项,然后在这些菜单项中添加了复选框作为子菜单项)。这在手动添加/删除项目方面工作得很好。但是,当涉及到以编程方式重置项目时,一般组件与特定组件(在本例中为复选框)之间存在冲突。

Component comp = contextMenu.getItems().get(x).getSubMenu().getItems().get(y);
if (comp instanceof Checkbox) {
    ((Checkbox) comp).setValue(false);
}
Run Code Online (Sandbox Code Playgroud)

请注意, comp实际上不是Checkbox 的实例;而是作为 com.vaadin.flow.component.contextmenu.MenuItem 返回,并且该项目不能转换为复选框。所以问题是,我如何取消选中给定的复选框?

Taz*_*voo 5

霍克说的:

如果您创建了类似 的菜单项menuItem.getSubMenu().addItem(new Checkbox("My option")),那么您可以遍历子组件并取消选择它们:

menuItem.getSubMenu().getItems().forEach(subMenuItem -> {
  subMenuItem.getChildren()
      .filter(Checkbox.class::isInstance)
      .map(Checkbox.class::cast)
      .forEach(c -> c.setValue(false));
});
Run Code Online (Sandbox Code Playgroud)

但另一种方法是使用 使项目可选择setCheckable(true)。然后,您将取消选择它们:

menuItem.getSubMenu().getItems().forEach(subMenuItem -> subMenuItem.setChecked(false));
Run Code Online (Sandbox Code Playgroud)

使用setCheckable(true). 首先,可检查项不能有子菜单。其次,当一个项目被选中时菜单将关闭。