首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CellTable中禁用CheckboxCell

在CellTable中禁用CheckboxCell
EN

Stack Overflow用户
提问于 2011-05-23 00:40:38
回答 2查看 9.4K关注 0票数 15

我有一个GWT CellTable<MyType>。此表包含应显示CheckBox的行。此CheckBox应该被选中或取消选中,这取决于MyType中的getter,但它应该被禁用,这样用户就不能单击它。有谁知道这是如何实现的吗?

以下是一些代码片段:

代码语言:javascript
复制
Column<MyType, Boolean> checkboxColumn = new Column<MyType, Boolean>(new CheckboxCell()) {
    @Override
    public Boolean getValue(MyType object) {
        return object.isItTrue();
    }
};
CellTable<MyType> cellTable = new CellTable<MyType>();
cellTable.addColumn(checkboxColumn, "Header title");
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-23 02:55:55

CheckboxCell不支持此功能,但您可以创建自己的支持此功能的单元。下面是未经测试的代码(大部分复制自CheckboxCell代码,谷歌版权所有(请参阅CheckboxCell源代码获取许可))!重要的部分在呈现代码中。你的新单元格应该放在一个Column<MyType, MyType>中。

代码语言:javascript
复制
public class DisableableCheckboxCell extends AbstractEditableCell<MyType> {

  /**
   * An html string representation of a checked input box.
   */
  private static final SafeHtml INPUT_CHECKED = SafeHtmlUtils.fromSafeConstant("<input type=\"checkbox\" tabindex=\"-1\" checked/>");

  /**
   * An html string representation of an unchecked input box.
   */
  private static final SafeHtml INPUT_UNCHECKED = SafeHtmlUtils.fromSafeConstant("<input type=\"checkbox\" tabindex=\"-1\"/>");

  private static final SafeHtml INPUT_CHECKED_DISABLED = SafeHtmlUtils.fromSafeConstant("<input type=\"checkbox\" tabindex=\"-1\" checked disabled=\"disabled\"/>");

  private static final SafeHtml INPUT_UNCHECKED_DISABLED = SafeHtmlUtils.fromSafeConstant("<input type=\"checkbox\" tabindex=\"-1\" disabled=\"disabled\"/>");

/** You'd copy the rest of the code from CheckboxCell, or implement the other required functions yourself **/

  @Override
  public void render(Context context, MyType value, SafeHtmlBuilder sb) {
    // Get the view data.
    Object key = context.getKey();
    MyType viewData = getViewData(key);
    if (viewData != null && viewData.equals(value)) {
      clearViewData(key);
      viewData = null;
    }

    MyType relevantValue = viewData != null ? viewData : value;
    boolean checked = relevantValue.shouldBeChecked();
    boolean enabled = relevantValue.shouldBeEnabled();

    if (checked && !enabled)) {
      sb.append(INPUT_CHECKED_DISABLED);
    } else if (!checked && !enabled) {
      sb.append(INPUT_UNCHECKED_DISABLED);
    } else if (checked && enabled) {
      sb.append(INPUT_CHECKED);
    } else if (!checked && enabled) {
      sb.append(INPUT_UNCHECKED);
  }
}
票数 13
EN

Stack Overflow用户

发布于 2016-07-26 22:54:06

我想出了我自己的简单解决方案。它不是很优雅,但它很容易实现。您的复选框不会被停用,但它根本不会出现在那里。下面是我所做的:

代码语言:javascript
复制
private Column<SomeObject,Boolean> someColumn = new Column<SomeObject,Boolean>(new CheckboxCell()) {
  @Override
  public Boolean getValue(SomeObject object){
     return object.getSomeValue();
  }
  @Override
  public void render(Context context, SomeObject object, SafeHtmlBuilder sb){
     if (object.getSomeOtherValue()){
        super.render(context, object, sb);
     }
  }
};

我只是简单地重写了render方法,以便仅在某个属性的值定义的特定条件下呈现CheckBox。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6089302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档