动态更改GWT CellTable的样式,以视觉方式将其标记为已禁用

时间:2013-11-20 02:23:36

标签: java css gwt

我正在寻找一种在运行时动态更改GWT CellTable样式的方法。我想通过灰显颜色方案使表看起来“禁用”,以匹配禁用的其他输入字段。现在,我可以阻止人们使用该表,但他们没有得到任何视觉提示。

我有一个资源包来设置表的样式,如herehere所述:

public interface DataTableStyle extends CellTable.Resources {
    @Override
    @Source({ CellTable.Style.DEFAULT_CSS, "DataTable.css" })
    CellTable.Style cellTableStyle();
}

这已经传递给了构造函数,并且已经运行了一段时间了:

public DataTable(int pageSize) {
    super(pageSize, getStyle());
}

protected static DataTableStyle getStyle() {
    return GWT.create(DataTableStyle.class);
}

我无法弄清楚如何在运行时动态调整表格的样式。我不确定这是否可能,或者我是否只是遗漏了一些东西。

我很确定一旦设置好,我就无法更改附加到单元格表的样式资源。由于我无法做到这一点,似乎我应该能够将addStyleDependentName()addStyleName()与其他CSS样式结合使用,但我无法找出正确的变化组合。< / p>

为了测试,我尝试覆盖现有的.cellTableHeader定义。我知道我的目标是正确的风格,因为如果我将原始样式中的background: #000000更改为background: magenta,则可以正常使用。

.cellTableHeader {
    background: #000000;
    color: #ffffff;
    text-shadow: none;
}

我所做的一个例子是here。该页面建议使用这样的CSS:

.cellTableHeader.cellTable-disabled {
    background: magenta; /* just to make it obvious */
}

然后,在我的代码中:

userTable.addStyleDependentName("disabled")

.cellTableHeader.cellTable-disabled样式本身会导致运行时错误:

The following unobfuscated classes were present in a strict CssResource:
cellTable-disabled
Fix by adding String accessor method(s) to the CssResource interface for obfuscated classes, or using an @external declaration for unobfuscated classes. 

recommended变通办法是在样式上使用@external或在资源包上注释@NotStrict。这两个都让我超过了运行时错误,但样式没有生效。我还尝试了其他各种方法:

.cellTableHeader.disabled {
    background: magenta; /* just to make it obvious */
}

.cellTableHeader .disabled {
    background: magenta; /* just to make it obvious */
}

.cellTableHeader disabled {
    background: magenta; /* just to make it obvious */
}

但是在这一点上我真的只是抓住稻草。

1 个答案:

答案 0 :(得分:1)

无法在运行时直接更改样式资源。

我看到两个解决方案:

自定义CellTableBuilder

使用此解决方案,CellTableBuilder使用的Style在运行时被替换,当重新绘制表时,将应用新样式。此解决方案存在问题,CellTable不使用CellTableBuilder来设置选择样式,因此替换构建器上的样式对选择样式没有影响。

Here使用源代码自定义CellTableBuilder解决方案的演示。

样式代理

另一种解决方案是代理CellTable和构建器使用的Style。在运行时,您可以更改代理使用的有效样式。因为DefaultCellTableBuilder在构造时存储样式值,所以您需要创建一个不缓存它的自定义值。我没有发现任何问题,但我没有对它进行过深入的测试

Here带有源代码的样式代理解决方案的演示。