为了账号安全,请及时绑定邮箱和手机立即绑定

来自每个表单导航的代号一个新的gui生成器后退命令

来自每个表单导航的代号一个新的gui生成器后退命令

幕布斯6054654 2021-05-10 16:53:35
我正在“新GUI”构建器中的表单之间导航。back默认情况下,旧表单在每个表单上都有一个按钮。back每当我以新形式浏览时,如何在每种形式的新gui生成器上启用按钮?通过theme.res中的常量进行了尝试。默认情况下仍未启用它。此外,“ new form1.show”方法是否是在表单之间导航的最佳方法?(请参见代码)假设名称文件:Main.java, myapplication.java, Form1 ,Form2 ,Form3 导航代码,假设名称button1和Form3:public void onbutton1ActionEvent(com.codename1.ui.events.ActionEvent ev) {        new Form3().show();       }Back 来自旧gui生成器的命令,在这里不起作用: public Form showForm(String resourceName, Command sourceCommand) {        try {            Form f = (Form)formNameToClassHashMap.get(resourceName).newInstance();            Form current = Display.getInstance().getCurrent();            if(current != null && isBackCommandEnabled() && allowBackTo(resourceName)) {                f.putClientProperty("previousForm", current);                setBackCommand(f, new Command(getBackCommandText(current.getTitle())) {                    public void actionPerformed(ActionEvent evt) {                          back(null);                    }                });            }            if(sourceCommand != null && current != null && current.getBackCommand() == sourceCommand) {                f.showBack();            } else {                f.show();            }            return f;        } catch(Exception err) {            err.printStackTrace();            throw new RuntimeException("Form not found: " + resourceName);        }    }虽然不是仅对form3有效,但对每种形式都有效。也没有工作。在每个侧面菜单上都放置“ back command”不是理想的解决方案,因为我们可能会从不同的表单导航到每种表单。额外:有没有一种方法可以为所有表单启用全局工具栏和全局命令,所以我不复制粘贴每个新表单的工具栏代码吗?如果在这里没有回答,我可能会开一个新的话题。
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

旧的GUI生成器处理导航,因为它是在诺基亚成为手机行业的世界领导者和4英寸设备被认为是大型设备时设计的。当时,我们认为每种形式的UI都比较简单,而导航是最困难的部分。


这改变了。但是对于大多数开发人员而言,最大的问题是无状态导航的概念,这引发了设计和功能方面的许多问题。


新的GUI构建器不包含任何导航代码或任何全局代码。每种形式都独立存在。


话虽如此,您可以通过保留表单实例并显示要导航到的表单来实现自己的状态机,例如:


public static class Controller { 

    private static Form1 f1;

    private static Form2 f2;



    public static void showF1() {

         if(f1 == null) f1 = new Form1();

         f1.show();

    }


    // etc...

}

为了简单起见,我使用了静态上下文,但是您可以实现自己的策略。请注意,您还可以在此处插入全局逻辑,例如,将工具栏添加为类似以下功能:


 private static void initForm(Form f) {

    // add global commands to the toolbar

 }

或者,您可以从一个公共基类派生所有形式,因为新的GUI构建器不限制您的继承。


查看完整回答
反对 回复 2021-05-19
  • 1 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信