【发布时间】:2019-01-15 00:09:49
【问题描述】:
我有一个带有基本溢出菜单的表单,它应该提供操作该表单项目列表的选项。一部分是通过各种方式对列表进行排序(效果很好),另一部分是提供列表的过滤。例如。有一个可以检查的简单购物清单,我希望过滤器只显示“打开”项目,但未选中以关注。
我可以将以前组装的组件添加到溢出菜单吗?它只是在该位置生成的一个对话框,因此它应该能够容纳任何组件。但是,“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);
【问题讨论】:
标签: checkbox menu overflow codenameone