[英]Change the style of a GWT CellTable dynamically, to visually mark it as disabled
我正在尋找一種在運行時動態更改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樣式結合使用,但是我無法找出正確的更改組合。
為了進行測試,我嘗試覆蓋.cellTableHeader
現有定義。 我知道我的目標是正確的樣式,因為如果我將原始樣式中的background: #000000
更改為background: magenta
,它將起作用。
.cellTableHeader {
background: #000000;
color: #ffffff;
text-shadow: none;
}
我工作的一個例子是這里 。 該頁面建議使用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.
建議的解決方法是在樣式上使用@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 */
}
但目前我真的只是在吸管。
無法在運行時直接更改樣式資源。
我看到兩種解決方案:
自定義CellTableBuilder
通過此解決方案,CellTableBuilder使用的樣式將在運行時替換,當重新繪制表格時,將應用新樣式。 該解決方案存在一個問題,即CellTable不使用CellTableBuilder來設置選擇樣式,因此在生成器上替換樣式不會影響選擇樣式。
這里是帶有源代碼的定制CellTableBuilder解決方案的演示。
樣式代理
另一種解決方案是代理CellTable和構建器使用的樣式。 在運行時,您可以更改代理使用的有效樣式。 因為DefaultCellTableBuilder在構造時存儲樣式值,所以您需要創建一個不緩存樣式的自定義樣式。 我沒有發現任何問題,但尚未對其進行深入測試
這里是帶有源代碼的樣式代理解決方案的演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.