【问题标题】:I can call method on current form(first form) before another form(second form) called from side menu我可以在从侧面菜单调用另一个表单(第二个表单)之前调用当前表单(第一个表单)上的方法
【发布时间】:2018-06-18 02:39:59
【问题描述】:

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

当从侧边菜单调用表单时,我在做同样的事情时遇到了困难。我必须根据表单中存在的元素进行处理,并且每个表单都有不同的元素。这不能是通用方法。如果从侧面菜单调用另一个表单,我不明白我怎么能做同样的事情。请指教。

示例:我在表单“开始”(第一个表单)上,它有按钮“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;
}

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    我猜 ENUM 接受一个动作监听器。我建议用LazyValue&lt;Form&gt; 替换它,它会为你懒惰地创建表单。然后你可以实现一个动作监听器:

    Form f = lazy.getValue();
    doSomethingOnForm(f);
    f.show();
    

    【讨论】:

    • 是的。枚举接受动作监听器。我已经更新了代码以更加清晰。我试图使用 LazyVale 但没有找到解决方案。由于我无权访问第一种形式的元素/控件,我如何从菜单选项访问元素..
    • 我已经在 MenuOptions 类中声明了这个 LazyValue 并替换了 Action Listener。正确的?但是在单击侧面菜单项之前,我无法访问我所在的表单上的按钮/控件。请指教。
    • 由于惰性值返回一个 Form 实例,您可以在此阶段操作表单。您可以让所有表单使用通用方法实现一个通用接口,例如doStuffToControls 然后在枚举代码中调用该方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    相关资源
    最近更新 更多