Как добавить одиночную кнопку выбора на сетке в gxt - PullRequest
0 голосов
/ 10 ноября 2011

В моем приложении у меня есть сетка, которая содержит несколько строк.

В каждом ряду я хочу установить переключатель, и в сетке можно выбрать только один переключатель (каждый ряд имеет один переключатель).

Для этого я попытался добавить 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 ]

1 голос
/ 11 ноября 2011

Вы должны определить

final RadioGroup radioGroup = new RadioGroup();

Как поле класса, но не в методе " render ". Примерно так:

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

Надеюсь, полезно ...

0 голосов
/ 15 ноября 2011

Я получил ответ, я использовал следующее ..

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

    };

это работает ..

...