Java 如何在CodenameOne中创建动态单选按钮

Java 如何在CodenameOne中创建动态单选按钮,java,radio-button,components,codenameone,Java,Radio Button,Components,Codenameone,使用CodenameOne,我根据数据库表上的记录数创建了一个单选按钮数组 Container searchDisplayContainer = findMyContainer(f); for(int i=0; i < records.length; i++) { RadioButton rdb = new RadioButton(); rdb.setName("rdb"+i); rdb.setText("rdb"+i); rdb.setGroup(

使用CodenameOne,我根据数据库表上的记录数创建了一个单选按钮数组

Container searchDisplayContainer = findMyContainer(f);

for(int i=0; i < records.length; i++) {
    RadioButton rdb = new RadioButton();

    rdb.setName("rdb"+i);

    rdb.setText("rdb"+i);

    rdb.setGroup("locations"); 

    searchDisplayContainer.addComponent(rdb);
}
并用if(rdb1.isSelected)检查按钮是否选中

但是,由于我最初不是在theme.res中创建单选按钮,因此无法使用
findRadioButton(f)
方法

我的问题是,如何在代码中创建多个单选按钮,然后在按下提交按钮后检查它们是否被选中


问题修改
包用户类;
导入生成的.StateMachineBase;
导入com.codename1.ui.*;
导入com.codename1.ui.events.*;
导入com.codename1.ui.util.Resources;
/**
*
*@author你的名字在这里
*/
公共类StateMachine扩展了StateMachineBase{
专用集装箱;
私人最终int记录长度=5;
private ButtonGroup bg=new ButtonGroup();
专用单选按钮[]rdbs=新单选按钮[recordLength];
公共状态机(字符串文件){
超级文件;
}
/**
*此方法应用于初始化变量,而不是
*构造函数/类的作用域,以避免竞争条件
*/
受保护的void initVars(资源){
}
@凌驾
受保护的主体前空隙(表格f){
searchDisplayContainer=findContainer1(f);

对于(int i=0;i您需要创建
按钮组
类的实例,并向其中添加单选按钮,以便将其与组中的其他按钮关联。

您需要创建
按钮组
类的实例,并向其添加单选按钮,以便将其与组中的其他按钮关联。

您需要创建
按钮组
类的实例,并向其中添加单选按钮,以便将其与组中的其他按钮关联。

您需要创建
按钮组
类的实例,并向其添加单选按钮,以便将其与组中的其他按钮关联。

您好,谢谢但是,在发布我的初始问题之前,我确实尝试过使用ButtonGroup。我已经修改了该问题以包含一个测试场景。可以看到,我创建了ButtonGroup的一个实例,还创建了单选按钮数组。但是,当我单击Submit Button(onMain_ButtonAction)时,我得到了错误“java.lang.reflect.InvocationTargetException“并且模拟器在显示单选按钮之前关闭。我希望在单击“提交”按钮时能够打印所选单选按钮的索引。请查看您的见解。谢谢!您会收到NullPointerException,因为您分配了数组,但没有分配数组中的元素,因此rdbs[I]是空的。看看堆栈,它实际上也会说空指针异常,并指向特定的行。嗨,Shai,谢谢你的提示,但是在发布我的初始问题之前,我确实尝试过使用ButtonGroup。我已经修改了问题,以包括一个测试场景。可以看到,我已经创建了ButtonGroup的一个实例,还创建了但是,当我单击Submit按钮(在Main_按钮上)时,我得到错误“java.lang.reflect.InvocationTargetException”并且模拟器在显示单选按钮之前关闭。我希望在单击“提交”按钮时能够打印所选单选按钮的索引。请查看您的见解。谢谢!您会收到NullPointerException,因为您分配了数组,但没有分配数组中的元素,因此rdbs[I]是空的。看看堆栈,它实际上也会说空指针异常,并指向特定的行。嗨,Shai,谢谢你的提示,但是在发布我的初始问题之前,我确实尝试过使用ButtonGroup。我已经修改了问题,以包括一个测试场景。可以看到,我已经创建了ButtonGroup的一个实例,还创建了但是,当我单击Submit按钮(在Main_按钮上)时,我得到错误“java.lang.reflect.InvocationTargetException”并且模拟器在显示单选按钮之前关闭。我希望在单击“提交”按钮时能够打印所选单选按钮的索引。请查看您的见解。谢谢!您会收到NullPointerException,因为您分配了数组,但没有分配数组中的元素,因此rdbs[I]是空的。看看堆栈,它实际上也会说空指针异常,并指向特定的行。嗨,Shai,谢谢你的提示,但是在发布我的初始问题之前,我确实尝试过使用ButtonGroup。我已经修改了问题,以包括一个测试场景。可以看到,我已经创建了ButtonGroup的一个实例,还创建了但是,当我单击Submit按钮(在Main_按钮上)时,我得到错误“java.lang.reflect.InvocationTargetException”并且模拟器在显示单选按钮之前关闭。我希望在单击“提交”按钮时能够打印所选单选按钮的索引。请查看您的见解。谢谢!您会收到NullPointerException,因为您分配了数组,但没有分配数组中的元素,因此rdbs[I]查看堆栈,它实际上也会说null指针异常,并将您指向特定的行。
RadioButton rdb1 = findRadioButton(f);  
package userclasses;

import generated.StateMachineBase;
import com.codename1.ui.*; 
import com.codename1.ui.events.*;
import com.codename1.ui.util.Resources;

/**
*
* @author Your name here
*/
public class StateMachine extends StateMachineBase {

    private Container searchDisplayContainer;
    private final int recordLength = 5;
    private ButtonGroup bg = new ButtonGroup();
    private RadioButton[] rdbs = new RadioButton[recordLength];

    public StateMachine(String resFile) {
        super(resFile);
    }

    /**
     * this method should be used to initialize variables instead of
     * the constructor/class scope to avoid race conditions
     */
    protected void initVars(Resources res) {
    }

    @Override
    protected void beforeMain(Form f) {
        searchDisplayContainer = findContainer1(f);

        for(int i=0;i<recordLength;i++){
            rdbs[i].setName("rdb"+i);
            rdbs[i].setText("rdb"+i);
            //add to button group
             bg.add(rdbs[i]);    
             //add to container
            searchDisplayContainer.addComponent(rdbs[i]);


        }
    }
    @Override
    protected void onMain_ButtonAction(Component c, ActionEvent event) {
        System.out.println(bg.getSelectedIndex());
    }
   }