codenameone引用另一个函数中的组件

codenameone引用另一个函数中的组件,codenameone,Codenameone,我已经创建了一个不使用设计器的注册表 在表单上,我创建了许多文本字段以及一个带有 Button btnRegister = new Button(); btnRegister.setName("btnRegister"); btnRegister.setText("Register"); btnRegister.addActionListener(new ActionListener() { public void actionPerformed(

我已经创建了一个不使用设计器的注册表

在表单上,我创建了许多文本字段以及一个带有

    Button btnRegister = new Button();
    btnRegister.setName("btnRegister");
    btnRegister.setText("Register");
    btnRegister.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            frmRegister_btnRegister(f);
        }
    });
    f.addComponent(btnRegister);    
我的问题是如何引用从按钮操作侦听器调用的函数中的文本字段。具体地说,我正在尝试使用addArgument设置用于网络调用的参数。当我使用designer时,我使用了findComponentName,但它不再可用

private void frmRegister_btnRegister(Form f) {
    // register new user
    ConnectionRequest r = new ConnectionRequest(); 
    r.setUrl(sUrlWebSvc);
    r.setPost(true);

    r.addArgument("Rest", "1");          // restaurant code
    r.addArgument("Req", "Register");    // R = register


    //r.addArgument("first_name", findTxtUsertName(c).getText());

    // show spinning dialog while connecting
    InfiniteProgress prog = new InfiniteProgress();
    Dialog dlg = prog.showInifiniteBlocking();
    r.setDisposeOnCompletion(dlg);
    NetworkManager.getInstance().addToQueueAndWait(r);
    //System.out.println(r.getResponseData());      
}

假设其定义正好在这条线上:

Button btnRegister = new Button();
作为:

只需将其更改为:

final TextField txt =....
然后可以将其或其getText字符串值传递给:

btnRegister.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        frmRegister_btnRegister(f, txt);
    }
});

当然,您需要更新frmRegister\u btnRegister的签名,以接受文本字段或字符串。

由于字段的数量太多,并且希望在我的应用程序的其他区域使用它,我希望将表单传递给actionPerformed中调用的函数将允许我访问表单上的所有组件。我希望获得几个字段的文本值以传递给web svc。是否没有相应的方法,例如我使用设计器创建表单时使用的findComponentName?否,这不是表单的方法,而是UIBuilder的方法。使用setName显式设置名称,GUI构建器在客户端属性中缓存组件。您最终将编写更多的代码来实现这一点。这就是为什么我们建议使用GUI构建器,因为它隐藏了大量繁杂的工作。
btnRegister.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        frmRegister_btnRegister(f, txt);
    }
});