Codename one - 使用动作事件和新的GUI构建器从表单A导航到表单B,然后从B导航回A

时间:2016-12-14 22:40:07

标签: forms codenameone actionevent

新的GUI Builder的最佳实践是什么,只需从"表格A"到另一个"表格B"单击"表单A"中的按钮,使用动作事件?

如果我在表格A中创建表格B,就像这样

public void oncreateAccountActionEvent(com.codename1.ui.events.ActionEvent ev) {
        new FormB().show();
    }

然后我显然无法在执行new FormB().show()之前从主类(start,stop,destroy方法)中修改表单B.在这种情况下,new FormA().show();位于主类的start方法中。

我希望能够指定例如表单B的后退按钮导航回表单A,但我想在Main类的start方法中添加它。

谢谢!

修改

我有Main-class(使用start(),stop(),destroy() - 方法),在这个类中我做new FormA().show()

但是在FormA的类中,我有oncreateAccountActionEvent - 方法(和按钮),它按new FormB().show()显示FormB。

但是我希望能够指定formB.setBackCommand()(在主类中的FormB工具栏中。

所以说我想在主类中用new FormA/B()指定两个表单 - 然后修改表单,比如在工具栏中添加按钮 - 然后告诉FormA FormB应该在action事件方法中使用。

2 个答案:

答案 0 :(得分:3)

使用showBack()方法从FormB返回FormA,如下面的代码所示。您可以保留对上一个/下一个表单实例的引用。

FormA formA = new FormA();
FormB formB = new FormB();

public void oncreateAccountActionEvent(com.codename1.ui.events.ActionEvent ev) {
   formB.show();
}

public void showFormA(){
   formA.showBack();
}

答案 1 :(得分:0)

我通过简单地覆盖Main-class中的oncreateAccountActionEvent - 方法来解决我的问题,并且仍能够在之前创建和修改formB:

Form formB= new FormB();
// Modifying formB
formB.setBackCommand(backCommand);
...

//Create formA and show the modified formB on button click
FormA formA= new FormA() {
   @Override
   public void oncreateAccountActionEvent(ActionEvent ev) {
        //Navigate to FormB
        formB.show();
   };
};

为了从formB导航回formA,我找到了这个解决方案,通过实现formB类的show() - 方法来保留对前一个表单的引用:

private Form previous;
...

public void show() {
        previous = Display.getInstance().getCurrent();
        super.show();
}
...
//go to the form before
public void goBack(){
        previous.showBack();
}

也许这也有助于其他人。