我可以在从侧边菜单调用的另一种形式(第二种形式)之前调用当前形式(第一种形式)上的方法

时间:2018-06-16 22:46:58

标签: codenameone

我在每个表单中使用addSideMenu(this)来添加侧边菜单。菜单项在ENUM MenuOptions中定义。在我的例子中,我希望在从每个表单调用另一个表单之前对控件进行一些处理。如果通过表单上的任何按钮或控件发生这种情况,那么我可以进行处理,然后调用下一个表单。

从侧边菜单调用表单时,我很难做同样的事情。我必须根据表单中的元素进行处理,每个表单都有不同的元素。这不是通用的方法。如果从Side Menu调用另一个表单,我不明白我该怎么做同样的事情。请指教。

示例:我正在表格"开始" (第一表格)它有按钮" A"和按钮" B"。我打电话给表格"设置"从侧面菜单 - >然后我想在控件移动到“设置”表单之前访问表单"开始"(第一个表单)的按钮A和B。

侧边菜单代码:

public static void addSideMenu(Form f) {
Toolbar tb = f.getToolbar();     
Button logout = new Button("Sign Out");
logout.setUIID("SignoutButton");       
for (MenuOptions m : Server.instance.getMenuSortOrder()) { 
m.addToSidemenu(tb);
}
tb.addComponentToSideMenu(logout);
}

侧边菜单选项代码:

public enum MenuOptions {     
SCHEDULE("Sch", "Schedule", FontImage.MATERIAL_PERM_CONTACT_CALENDAR,
e -> new AppointmentsForm(false, true, true, 
Server.AppointmentFolders.APPOINTMENTS).show()),
ACTIVITY("Start", "Activity", FontImage.MATERIAL_ASSIGNMENT,
e -> new ActivityForm("").show()), 
SETTINGS("Settings", "Settings", FontImage.MATERIAL_SETTINGS,
e -> new SettingsForm().show());
}

MenuOptions(String name, String title, char icon, 
ActionListener<ActionEvent> al) {
this.name = name;
this.title = title;
this.icon = icon;
this.al = al;
}

public Component createMenuButton() {
Button b = new Button(title);
if (Display.getInstance().isTablet()) {
FontImage.setMaterialIcon(b, icon, 20);
} else {
FontImage.setMaterialIcon(b, icon, 10);
}
Font mediumBoldProportionalFont = 
Font.createSystemFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, 
Font.SIZE_MEDIUM);
b.getUnselectedStyle().setFont(mediumBoldProportionalFont);
b.getAllStyles().setBorder(Border.createEtchedRaised());
b.addActionListener(al);
return b;
}

1 个答案:

答案 0 :(得分:0)

我猜测ENUM接受了一个动作监听器。我建议用LazyValue<Form>替换它,这会为你懒惰地创建表单。然后,您可以实现一个动作侦听器:

Form f = lazy.getValue();
doSomethingOnForm(f);
f.show();
相关问题