如何在gxt中添加网格上的单选单选按钮

时间:2011-11-10 04:14:27

标签: grid radio gxt

在我的应用程序中,我有一个包含一些行的网格。

在每一行中,我想放一个单选按钮,并且只能在网格中选择一个单选按钮(每行有一个单选按钮)。

为此,我尝试添加GridCellRenderer并使用以下代码返回一个单选按钮:

GridCellRenderer<ModelData> button = new GridCellRenderer<ModelData>() {    
    @Override
    public Object render(ModelData model, String property,
            ColumnData config, final int rowIndex, int colIndex,
            ListStore<MonitorModel> store, Grid<MonitorModel> grid) {
        // TODO Auto-generated method stub
        final RadioGroup radioGroup = new RadioGroup();  

        for(int i=0; i<store.getCount(); i++){
            radio = new Radio();
            radio.setBoxLabel("radio"+rowIndex);     

            if(radio.getBoxLabel().equals("radio0")&& radio.getValue()== false){
                radio.setValue(true);   
                //isFirstTime = true;
            }
            radioGroup.addListener(Events.Change, new Listener<FieldEvent>() {
                public void handleEvent(FieldEvent fe) {                    
                    if (((Boolean)fe.getValue()) == true) {                     
                        radio.setValue(true);   
                    }
                }
            });         

        }       
        radioGroup.add(radio); 
        return radioGroup; 
    }         
};

当我加载网格时,结果是正确的。

但我遇到的问题是,当我点击一个单选按钮时,如果已经选中了所有其他单选按钮,则会保持检查状态。如何点击按钮,取消选择其他按钮?

感谢。

2 个答案:

答案 0 :(得分:1)

您应该定义

final RadioGroup radioGroup = new RadioGroup();

作为类字段,但不在渲染”方法中。像这样:

GridCellRenderer<ModelData> button = new GridCellRenderer<ModelData>() {

    final RadioGroup radioGroup = new RadioGroup();  

    @Override
    public Object render(ModelData model, String property,
            ColumnData config, final int rowIndex, int colIndex,
            ListStore<MonitorModel> store, Grid<MonitorModel> grid) {

        for(int i=0; i<store.getCount(); i++){
            radio = new Radio();
            radio.setBoxLabel("radio"+rowIndex);     
    ......

希望有帮助......

答案 1 :(得分:0)

我得到了答案,我使用了以下......

GridCellRenderer<ModelClass> button = new GridCellRenderer<ModelClass>() {    
        @Override
        public Object render(final ModelClass model, String property,
                ColumnData config, final int rowIndex, int colIndex,
                final ListStore<ModelClass> store, Grid<ModelClass> grid) {     
            Radio radio = new Radio(); 
            for(int i=0; i< store.getCount(); i++){
                radio = new Radio();
                radio.setName("Radio"+ i);
                radio.setHeight(16);

                if (model.get("checked").equals(Boolean.TRUE)) { 
                    radio.setValue(true); 
                } 
                else { 
                    radio.setValue(false); 
                } 
            } 
            radio.addListener(Events.OnClick, new Listener<FieldEvent>() {              
                @Override
                public void handleEvent(FieldEvent be) {                    
                    // TODO Auto-generated method stub
                    // Something....
                }
            });
            return radio; 
        } 

    };

它有效..