以编程方式取消选中 Vaadin 上下文菜单中的复选框
Programmatically unchecking a Checkbox within Vaadin Context Menu
我创建了一个具有树结构的上下文菜单(添加了菜单项,然后在这些菜单项中添加了复选框作为子菜单项)。这在手动 adding/removing 项目方面工作得很好。但是,当涉及到以编程方式重置项目时,在通用组件与特定组件(在本例中为复选框)方面存在冲突。
Component comp = contextMenu.getItems().get(x).getSubMenu().getItems().get(y);
if (comp instanceof Checkbox) {
((Checkbox) comp).setValue(false);
}
请注意,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));
});
但另一种方法是使用 setCheckable(true)
使项目可选择。然后您将取消选择它们:
menuItem.getSubMenu().getItems().forEach(subMenuItem -> subMenuItem.setChecked(false));
使用 setCheckable(true)
时会想到两个缺点。首先,可检查项目不能有子菜单。其次,选中项目时菜单将关闭。
我创建了一个具有树结构的上下文菜单(添加了菜单项,然后在这些菜单项中添加了复选框作为子菜单项)。这在手动 adding/removing 项目方面工作得很好。但是,当涉及到以编程方式重置项目时,在通用组件与特定组件(在本例中为复选框)方面存在冲突。
Component comp = contextMenu.getItems().get(x).getSubMenu().getItems().get(y);
if (comp instanceof Checkbox) {
((Checkbox) comp).setValue(false);
}
请注意,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));
});
但另一种方法是使用 setCheckable(true)
使项目可选择。然后您将取消选择它们:
menuItem.getSubMenu().getItems().forEach(subMenuItem -> subMenuItem.setChecked(false));
使用 setCheckable(true)
时会想到两个缺点。首先,可检查项目不能有子菜单。其次,选中项目时菜单将关闭。