代号一 - 溢出菜单中的复选框选项
Codename one - checkbox option in overflow menu
我有一个带有基本溢出菜单的表单,它应该提供操作该表单项目列表的选项。一部分是通过各种方式对列表进行排序(效果很好),另一部分是提供列表的过滤。例如。有一个简单的可以检查的项目购物清单,我希望过滤器仅显示 "open" 项,但未选中以关注。
我可以将以前组装的组件添加到溢出菜单吗?它只是在那个位置产生的一个对话框,所以它应该能够容纳任何组件。但是,选项 "add(Material)CommandToOverflowMenu" 只允许直接添加命令或字符串、图标、侦听器组合。
如果无法自定义组件,我仍然可以使用图标先显示一个空的复选框,然后在按下后更新为选中的复选框图标。但是,如何在添加现有溢出项后对其进行操作?我什至没有看到删除以前添加的溢出项的方法,因为 "getOverflowCommands" returns 是一个 Iterable,它不应该用于操作列表。
有没有办法做到这一点,我是否必须设置自己的自定义溢出菜单,如对话框?
谢谢并致以最诚挚的问候
用解决方案编辑
我创建了一个新的 class 来解决我的问题:
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);
溢出菜单构建不佳,可能应该重写。我们没有对那里的复选框选项的内置支持,并且进行更改以添加它会非常麻烦。
我能想到的最佳解决方法是添加一个带有复选框的命令作为图标。然后 checking/unchecking 调用命令时。 addMaterialCommandToOverflowMenu
和类似的命令方法 return 一个 Command
实例,在这种情况下您需要保存以供将来参考。
如果您想去 "all out",您只需在右侧工具栏上添加一个按钮,然后使用它来显示完全自定义的溢出菜单。这在某些方面可能更容易。
我有一个带有基本溢出菜单的表单,它应该提供操作该表单项目列表的选项。一部分是通过各种方式对列表进行排序(效果很好),另一部分是提供列表的过滤。例如。有一个简单的可以检查的项目购物清单,我希望过滤器仅显示 "open" 项,但未选中以关注。
我可以将以前组装的组件添加到溢出菜单吗?它只是在那个位置产生的一个对话框,所以它应该能够容纳任何组件。但是,选项 "add(Material)CommandToOverflowMenu" 只允许直接添加命令或字符串、图标、侦听器组合。
如果无法自定义组件,我仍然可以使用图标先显示一个空的复选框,然后在按下后更新为选中的复选框图标。但是,如何在添加现有溢出项后对其进行操作?我什至没有看到删除以前添加的溢出项的方法,因为 "getOverflowCommands" returns 是一个 Iterable,它不应该用于操作列表。
有没有办法做到这一点,我是否必须设置自己的自定义溢出菜单,如对话框?
谢谢并致以最诚挚的问候
用解决方案编辑 我创建了一个新的 class 来解决我的问题:
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);
溢出菜单构建不佳,可能应该重写。我们没有对那里的复选框选项的内置支持,并且进行更改以添加它会非常麻烦。
我能想到的最佳解决方法是添加一个带有复选框的命令作为图标。然后 checking/unchecking 调用命令时。 addMaterialCommandToOverflowMenu
和类似的命令方法 return 一个 Command
实例,在这种情况下您需要保存以供将来参考。
如果您想去 "all out",您只需在右侧工具栏上添加一个按钮,然后使用它来显示完全自定义的溢出菜单。这在某些方面可能更容易。