溢出菜单中的"代号一复选框"选项



我有一个带有基本溢出菜单的表单,它应该提供操作该表单项目列表的选项。一部分是通过各种方式对列表进行排序(效果很好(,另一部分是提供列表过滤。例如,有一个简单的购物清单,里面有可以检查的商品,我希望过滤器只显示"打开的"商品,但不检查以集中注意力。

我可以将以前组装的组件添加到溢出菜单中吗?它只是在那个位置生成的对话框,所以它应该能够容纳任何组件。但是,选项"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);

溢出菜单构建不好,可能应该重写。我们没有对复选框选项的内置支持,更改添加复选框会非常麻烦。

我能想到的最好的解决方法是添加一个带有复选框作为图标的命令。然后在调用命令时进行检查/取消检查。addMaterialCommandToOverflowMenu和类似的命令方法返回一个Command实例,在这种情况下需要保存该实例以供将来参考。

如果你想"全力以赴",你可以在右侧工具栏上添加一个按钮,然后用它来显示一个完全自定义的溢出菜单。这在某些方面可能更容易。

最新更新