【问题标题】:CodeNameOne Dynamically created Form, how to "Back"CodeNameOne 动态创建的表单,如何“返回”
【发布时间】:2012-08-28 12:51:08
【问题描述】:

在按钮的 actionListener 中,我们想动态创建一个表单。

例如类似的东西

Button b = new Button("Clickme");
b.setActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        Form f = new Form();
        Container c = new Container();
        ...
        f.addComponent(c);
        f.show();
    }
});

效果很好.....但是“返回”按钮不起作用

有谁知道在 actionListener 中实现动态表单的正确方法,或者通过 action Listener 跳转到预定义表单的正确方法?

谢谢

詹姆斯

【问题讨论】:

    标签: java lwuit codenameone


    【解决方案1】:

    您需要创建一个返回命令并将其与表单相关联:

    Command back = new Command("Back") {
         public void actionPerformed(ActionEvent ev) {
             // notice that when showing a previous form it is best to use showBack() so the 
             // transition runs in reverse
             showPreviousForm();
         }
    };
    f.setBackCommand(back);
    

    您可以在完全手工编码的厨房水槽演示中看到这一点。

    【讨论】:

    • 您好,谢谢您的回复。运气不太好。我有一个表格列表。每个列表项都有一个按钮,该按钮有一个动态生成表单的 actionListener。我可以回溯到 listrenderer 类,但此时调用 getComponentForm() 会得到 NPE ..... 所以不知道如何让 parentForm 设置 parentForm.showBack()。
    • 您需要再次生成之前的表单,这正是我们在 GUI builder 中所做的。或者,您可以将表单实例保存在 RAM 中,这会带来明显的内存成本影响。
    • 好的,没有意识到旧表单对象在生成新表单对象时会从内存中释放。将思考如何以循环方式进行重组。
    【解决方案2】:

    您也可以将表单作为参数

    chooseDB(c.getComponentForm());
    
    private void chooseDB(final Form main) {
        Form f = new Form("Choose a Database");
        ...
        Command backCommand = new Command("Back") {
            public void actionPerformed(ActionEvent ev) {
                main.showBack();
            }};
        f.addCommand(backCommand);
        f.setBackCommand(backCommand);
        f.show();
    }
    

    所以对于你的例子:

    Button b = new Button("Clickme");
    b.setActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            Form f = new Form();
            Container c = new Container();
            Command backCommand = new Command("Settings") {
            public void actionPerformed(ActionEvent ev) {
                b.getComponentForm().showBack();
            }};
        f.addCommand(backCommand);
        f.setBackCommand(backCommand);
            f.addComponent(c);
            f.show();
        }
    });
    

    Shai,如果我做错了什么,请纠正这个。谢谢。

    【讨论】:

      猜你喜欢
      • 2014-04-30
      • 2021-07-27
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 2020-05-08
      • 2013-06-03
      相关资源
      最近更新 更多