2009-10-28 50 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; 
} 

是你想要嗎?