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 返回,并且该项目不能转换为复选框。所以问题是,我如何取消选中给定的复选框?
霍克说的:
如果您创建了类似 的菜单项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). 首先,可检查项不能有子菜单。其次,当一个项目被选中时菜单将关闭。