簡體   English   中英

動態更改GWT CellTable的樣式,以可視方式將其標記為已禁用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM