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

时间:2018-07-09 07:49:33

标签: java codenameone

我正在NEW GUI构建器中的表单之间导航。默认情况下,旧表单在每个表单上都有一个back按钮。

每次导航到新表单时,如何在每种表单的新gui生成器上启用back按钮?通过theme.res中的常量进行了尝试。默认情况下仍未启用。

此外,“ new form1.show”方法是在表单之间导航的最佳方法吗? (请参见代码)

假设名称文件:

Main.java, myapplication.java, Form1 ,Form2 ,Form3 

用于导航的代码,假设名称为button1Form3

public void onbutton1ActionEvent(com.codename1.ui.events.ActionEvent ev) {
        new Form3().show();   
    }
来自旧gui生成器的

Back命令,在这里不起作用:

 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);
        }
    }

我尝试过:

  form.setBackCommand(cmd);

public Command setBackCommand(String title, ActionListener<ActionEvent> listener)
public void setBackCommand(Command cmd)
public Command setBackCommand(String title, BackCommandPolicy policy, ActionListener<ActionEvent> listener)
public void setBackCommand(Command cmd, BackCommandPolicy policy)
    boolean onBack() {
            return true;
        }

https://www.codenameone.com/blog/toolbar-back-easier-material-icons.html main.javamyapplication.java上的用户不接受命令。

Form3.getToolbar().setBackCommand("", e -> Form3.showBack());

althouth不仅应仅适用于form3,还应适用于每种形式。

也不起作用。在每个侧面菜单上都放置“ back command”并不是理想的解决方案,因为我们可能会从不同的表单导航到每种表单。

额外: 有没有一种方法可以为所有表单启用全局工具栏和全局命令,所以我不为每个新表单复制粘贴工具栏代码吗?如果在这里没有回答,我可能会创建一个新线程。

谢谢。

1 个答案:

答案 0 :(得分:2)

当诺基亚成为手机行业的世界领导者并认为4英寸设备被认为是大型设备时,旧的GUI构建器就可以处理导航。当时,我们认为每种表单的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构建器不会限制您的继承。