我有一个带有基本溢出菜单的表单,该菜单应该提供处理该表单项列表的选项。一部分是通过各种方式对列表进行排序(效果很好),另一部分是对列表进行过滤。例如。拥有一个可以检查的简单购物清单,我希望过滤器仅显示“未清”项目,而未选中则重点关注。
我可以将先前组装的组件添加到溢出菜单吗?它只是在该位置产生的一个对话框,因此它应该能够容纳与此相关的任何组件。但是,选项“ add(Material)CommandToOverflowMenu”仅允许直接添加命令或添加字符串,图标,侦听器组合。
如果无法使用自定义组件,则仍然可以使用该图标先显示一个空白复选框,然后按一下后更新为选中的复选框图标。但是,添加后如何处理现有的溢出项目?我什至没有看到删除以前添加的溢出项的方法,因为“ getOverflowCommands”返回一个Iterable,这不应该用于操作列表。
有没有办法做到这一点,我必须设置自己的自定义,溢出菜单(如对话框)吗?
感谢和问候
使用解决方案进行编辑 我创建了一个新类来解决我的问题:
public class ToggleCommand extends Command {
private boolean selected;
private static Image selectedImage = FontImage.createMaterial(FontImage.MATERIAL_RADIO_BUTTON_CHECKED,
new Label().getUnselectedStyle());
private static Image unSelectedImage = FontImage.createMaterial(FontImage.MATERIAL_RADIO_BUTTON_UNCHECKED,
new Label().getUnselectedStyle());
public ToggleCommand(String command) {
this(command, selectedImage);
}
public ToggleCommand(String command, Image icon) {
super(command, icon);
selected = true;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
if (selected) {
this.setIcon(selectedImage);
} else {
this.setIcon(unSelectedImage);
}
}
}
您可以这样使用:
filterDoneCommand = new ToggleCommand("Show closed?") {
@Override
public void actionPerformed(ActionEvent evt) {
filterDoneCommand.setSelected(!filterDoneCommand.isSelected());
// do your other stuff
}
};
getToolbar().addCommandToOverflowMenu(filterDoneCommand);
答案 0 :(得分:1)
溢出菜单的构建效果不佳,应该重新编写。我们在那里没有对复选框选项的内置支持,因此进行更改以添加它会很麻烦。
我能想到的最好的解决方法是添加带有复选框作为图标的命令。然后在调用命令时检查/取消选中。 addMaterialCommandToOverflowMenu
和类似的命令方法返回一个Command
实例,在这种情况下,您需要保存该实例以供将来参考。
如果要“全力以赴”,您可以在右侧工具栏上添加一个按钮,并使用该按钮显示完全自定义的溢出菜单。在某些方面,这可能会更容易。