如何解决以编程方式取消选中 Vaadin 上下文菜单中的复选框
我创建了一个树状结构的上下文菜单(添加了菜单项,然后在这些菜单项中添加了复选框作为子菜单项)。这在手动添加/删除项目方面工作得很好。但是,在以编程方式重置项目时,通用组件与特定组件(在本例中为复选框)之间存在冲突。
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)
时会想到两个缺点。首先,可检查项不能有子菜单。其次,当一个项目被选中时菜单将关闭。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。