我正在寻找一种在运行时动态更改GWT CellTable样式的方法。我想通过灰显颜色方案使表看起来“禁用”,以匹配禁用的其他输入字段。现在,我可以阻止人们使用该表,但他们没有得到任何视觉提示。
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 */
}
但是在这一点上我真的只是抓住稻草。
答案 0 :(得分:1)
无法在运行时直接更改样式资源。
我看到两个解决方案:
自定义CellTableBuilder
使用此解决方案,CellTableBuilder使用的Style在运行时被替换,当重新绘制表时,将应用新样式。此解决方案存在问题,CellTable不使用CellTableBuilder来设置选择样式,因此替换构建器上的样式对选择样式没有影响。
Here使用源代码自定义CellTableBuilder解决方案的演示。
样式代理
另一种解决方案是代理CellTable和构建器使用的Style。在运行时,您可以更改代理使用的有效样式。因为DefaultCellTableBuilder在构造时存储样式值,所以您需要创建一个不缓存它的自定义值。我没有发现任何问题,但我没有对它进行过深入的测试
Here带有源代码的样式代理解决方案的演示。