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