2009-10-28 56 views
3

我正在寻找一种方法来绘制GXT(GWT-Ext)RadioGroup或CheckBoxGroup的元素,而不是单列(Orientation.VERTICAL)或单行(Orientation.HORIZONTAL)以外的布局。我看到in ExtJS 3.0, RadioGroups and CheckBoxGroups are easily rendered in multiple columns。但是,配置似乎无法在GXT中访问。有什么我在这里失踪?如果没有“简单”解决方案,是否有办法为RadioGroup或CheckBoxGroup编写自定义渲染器?从com.extjs.gxt.ui.client.widget.form.MultiField呈现多列中的GXT RadioGroup或CheckBoxGroup的元素?

回答

1

com.extjs.gxt.ui.client.widget.form.CheckBoxGroup继承它说在其API page

显示在一个单一的行或列的多个字段的字段。

因此,我认为当谈到一个'简单'解决方案时,你倒霉了。有了复选框,我认为你可以用多个CheckboxGroups和hbox/vbox或列布局来伪装它,但是我认为它不适用于多个RadioGroup,因为分组Radios有更多的意义(在哪些是互斥的方面)。

0

不知道你正在寻找的物品的最终分配,我不知道这是否适合你;然而,你有没有想过:创建一个大的RadioGroup或CheckBoxGroup,然后根据需要使单个单选按钮/复选框不可见,以获得你想要的模式?

如果您正在查找多列,请说出三列,每列四个按钮,然后使用三组四个按钮并排排列。然后为每个组写一个OnClick()或OnSelect()事件(假设存在)来管理这三个组,就像它们一样。这对于复选框来说应该是微不足道的,而对于单选按钮来说更复杂一点,因为一次只能选择一个单选按钮。

R-1 R-2 R-3 
+---++---++---+ 
| o || o || o | 
| o || o || o | 
| o || o || o | 
| o || o || o | 
+---++---++---+ 

// psudocode 

form.onLoad() 
{ 
    r1.selected = none; 
    r2.selected = none; 
    r3.selected = none; 
    selection = none; 
} 

r1.OnClick() 
{ 
    selection = r1.selected; 
    r2.selected = none; 
    r3.selected = none; 
} 

r2.OnClick() 
{ 
    r1.selected = none; 
    selection = r2.selected; 
    r3.selected = none; 
} 

r3.OnClick() 
{ 
    r1.selected = none; 
    r2.selected = none; 
    selection = r3.selected; 
} 
1

您可以为网格中的每列实施GridCellRenderer,每列对应一个radiogroup选项。这将适用于GXT:

public class MyRenderer implements GridCellRenderer { 
    public Radio render(ModelData model, String columnChoice, ColumnData config, 
      int rowIndex, int colIndex, ListStore store, Grid grid) { 

     Something something = ((Something) model).getSomething(); 
     Radio radio = new Radio(); 
     // we want one radioGroup per row: 
     radio.setName("radioButton" + rowIndex); 
     // set value depending on some property in the model corresponding to a 
     // column 
     if (something != null && something.getChoice().equals(columnChoice)) { 
      radio.setValue(true); 
     } 
     return radio; 
    } 
} 
0

我知道这个问题是2岁,但我发现解决方案:-)。 重点是添加无线电收音机,而不是RadioButton。一些示例:

final RadioGroup outputType = new RadioGroup("outputType"); 

    Radio pdf = new Radio(); 
    Radio docx = new Radio(); 
    Radio rtf = new Radio(); 
    Radio ods = new Radio(); 

    outputType.add(pdf); 
    outputType.add(docx); 
    outputType.add(rtf); 
    outputType.add(ods); 

    //this goes 
    panel.add(pdf); 
    panel.add(docx); 
    panel.add(rtf); 
    panel.add(ods); 

    //instead of this 
    panel.add(outputType); 

我希望这将帮助任何人:)

0

这是你的类的构造函数的简单的例子,应该扩展万事<的CheckBox>类。

public MyClass (String[] items, int columnsNumber) { 
    setOrientation(Style.Orientation.HORIZONTAL); 
    setSpacing(0); 

    if (items != null) { 
     final CheckBoxGroup[] columns = createColumns(columnsNumber); 
     int i = 0; 
     for (String item : items) { 
      CheckBox check = new CheckBox(); 
      check.setBoxLabel(item); 
      columns[i++ % columnsNumber].add(check); 
      CLogger.info("Checkbox added for: " + item); 
     } 
     for (CheckBoxGroup column : columns) { 
      add(column); 
     } 
    } 
} 

private CheckBoxGroup[] createColumns(int columnsNumber) { 
    CheckBoxGroup[] columns = new CheckBoxGroup[columnsNumber]; 
    for (int i = 0; i < columns.length; i++) { 
     columns[i] = new CheckBoxGroup(); 
     columns[i].setOrientation(Style.Orientation.VERTICAL); 
     columns[i].setSpacing(0); 
    } 
    return columns; 
} 

是你想要吗?