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

时间:2014-03-22 15:25:29

标签: java radio-button components codenameone

使用CodenameOne,我根据数据库表上的记录数创建了一个RadioButtons数组。

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

使用此代码,模拟器屏幕上会显示许多RadioButtons。

我的问题是,在显示无线电按钮后,我无法检查选择了哪一个。

通常我可以在theme.res中创建radiobutton并在代码中使用:

调用它
RadioButton rdb1 = findRadioButton(f);  

并检查是否使用if(rdb1.isSelected)

选择了该按钮

但是由于我最初没有在theme.res中创建单选按钮,所以我无法使用findRadioButton(f)方法。

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


问题修改

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

1 个答案:

答案 0 :(得分:3)

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