在我的应用程序中,我有一个包含一些行的网格。
在每一行中,我想放一个单选按钮,并且只能在网格中选择一个单选按钮(每行有一个单选按钮)。
为此,我尝试添加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;
}
};
当我加载网格时,结果是正确的。
但我遇到的问题是,当我点击一个单选按钮时,如果已经选中了所有其他单选按钮,则会保持检查状态。如何点击按钮,取消选择其他按钮?
感谢。
答案 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;
}
};
它有效..