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

时间:2018-12-17 11:43:13

标签: checkbox menu overflow codenameone

我有一个带有基本溢出菜单的表单,该菜单应该提供处理该表单项列表的选项。一部分是通过各种方式对列表进行排序(效果很好),另一部分是对列表进行过滤。例如。拥有一个可以检查的简单购物清单,我希望过滤器仅显示“未清”项目,而未选中则重点关注。

我可以将先前组装的组件添加到溢出菜单吗?它只是在该位置产生的一个对话框,因此它应该能够容纳与此相关的任何组件。但是,选项“ 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);

1 个答案:

答案 0 :(得分:1)

溢出菜单的构建效果不佳,应该重新编写。我们在那里没有对复选框选项的内置支持,因此进行更改以添加它会很麻烦。

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

如果要“全力以赴”,您可以在右侧工具栏上添加一个按钮,并使用该按钮显示完全自定义的溢出菜单。在某些方面,这可能会更容易。