CellTables和css(GWT)
有人可以帮我设置一个CellTable行的背景吗,我一直都在努力做到这一点,并且一直在失败,这让我很生气。 我已经尝试过调用setRowStyles()
但这似乎没有用,我已经读过,一旦设置了样式,你就无法改变CellTable的样式 – 因为默认设置。 然后我尝试使用我自己的接口CellTableResources构建一个CellTable,就像在这个确切主题的post上看到的那样,这给了我关于未经模糊处理的ccs元素的错误消息….我的css没有被混淆是一个明显的错误消息。 现在我不知道该尝试什么,而且我是正式的STUCK。
我一直在阅读关于这个@external它似乎没有帮助…甚至不确定外部位应该去哪里…我猜在css但像往常一样卡住时我正在尝试任何事情!
TonyK
我知道这是多么令人沮丧,我一直在同一个地方。 我已经包含了我用来实现这一目标的所有步骤。 但听起来你几乎就在那里,所以你可能不需要所有这些。
正如您提到的使用自己的css类名称,您必须实现com.google.gwt.user.cellview.client.CellTable.Resources并将您的类的实例传递给CellTable构造函数。
CellTable声明
CellTable myCellTable = new CellTable (10, MyResources.INSTANCE);
Resources的实现还需要com.google.gwt.resources.client.ImageResource和com.google.gwt.user.cellview.client.CellTable.Style的实例,该类将提供您的css类名。 这里简单的是Resources,ImageResource和Style的存根实现,除了提供字符串作为样式名称之外什么都不做。 最后这些可以来自ClientBundle但不是必需的。
样式存根(使用字符串文字)
import com.google.gwt.user.cellview.client.CellTable.Style; public class MyStyle implements Style { public static final MyStyle INSTANCE = new MyStyle(); @Override public boolean ensureInjected() { return false; } @Override public String cellTableCell() { return "myCssClassName"; } @Override public String cellTableEvenRow() { return "myCssClassName"; } @Override public String cellTableEvenRowCell() { return "myCssClassName"; } @Override public String cellTableOddRow() { return "myCssClassName"; } @Override public String cellTableOddRowCell() { return "myCssClassName"; } @Override public String cellTableFirstColumn() { return "myCssClassName"; } @Override public String cellTableFirstColumnFooter() { return "myCssClassName"; } @Override public String cellTableFirstColumnHeader() { return "myCssClassName"; } @Override public String cellTableFooter() { return "myCssClassName"; } @Override public String cellTableHeader() { return "myCssClassName"; } @Override public String cellTableHoveredRow() { return "myCssClassName"; } @Override public String cellTableHoveredRowCell() { return "myCssClassName"; } @Override public String cellTableKeyboardSelectedCell() { return "myCssClassName"; } @Override public String cellTableKeyboardSelectedRow() { return "myCssClassName"; } @Override public String cellTableKeyboardSelectedRowCell() { return "myCssClassName"; } @Override public String cellTableLastColumn() { return "myCssClassName"; } @Override public String cellTableLastColumnFooter() { return "myCssClassName"; } @Override public String cellTableLastColumnHeader() { return "myCssClassName"; } @Override public String cellTableLoading() { return "myCssClassName"; } @Override public String cellTableSelectedRow() { return "myCssClassName"; } @Override public String cellTableSelectedRowCell() { return "myCssClassName"; } @Override public String cellTableSortableHeader() { return "myCssClassName"; } @Override public String cellTableSortedHeaderAscending() { return "myCssClassName"; } @Override public String cellTableSortedHeaderDescending() { return "myCssClassName"; } @Override public String cellTableWidget() { return "myCssClassName"; } @Override public String getName() { return "myCssClassName"; } @Override public String getText() { return "myCssClassName"; } }
ImageResource Stub
import com.google.gwt.resources.client.ImageResource; class MyImageResource implements ImageResource { public static final MyImageResource INSTANCE = new MyImageResource(); @Override public int getHeight() { return 0; } @Override public int getLeft() { return 0; } @Override public String getName() { return ""; } @Override public int getTop() { return 0; } @Override public String getURL() { return ""; } @Override public int getWidth() { return 0; } @Override public boolean isAnimated() { return false; } }
资源存根
import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.cellview.client.CellTable.Resources; import com.google.gwt.user.cellview.client.CellTable.Style; public class MyResources implements Resources { public static final MyResources INSTANCE = new MyResources(); @Override public ImageResource cellTableFooterBackground() { return MyImageResource.INSTANCE; } @Override public ImageResource cellTableHeaderBackground() { return MyImageResource.INSTANCE; } @Override public ImageResource cellTableLoading() { return MyImageResource.INSTANCE; } @Override public ImageResource cellTableSelectedBackground() { return MyImageResource.INSTANCE; } @Override public ImageResource cellTableSortAscending() { return MyImageResource.INSTANCE; } @Override public ImageResource cellTableSortDescending() { return MyImageResource.INSTANCE; } @Override public Style cellTableStyle() { return MyStyle.INSTANCE; } }
所以,此时你应该有一个没有样式的Cell Tabula Rasa,你应该能够在浏览器中检查你的CellTable元素,并将myCssClassName视为无处不在的CSS类名,不进行模糊处理。
如果此时使用传统方法之一链接到样式表,则应该能够将“myCssClassName”字符串设置为与特定样式表对应。
样式表链接
现在,如果您想使用ClientBundle注入样式,则需要执行一些其他步骤。
首先,请确保您在某个时候注入样式表; 这真的很容易忘记。 一个简单的地方在你的模块的EntryPoint中,你可以确定它被调用。
CssResource注入
MyClientBundle.INSTANCE.myCssResource().ensureInjected();
最后使用您的CssResource为之前的Style实现提供名称。 无论CSS类名是否被混淆,都应该注入并使用正确的名称。
ClientBundle存根
import com.google.gwt.core.client.GWT; import com.google.gwt.resources.client.ClientBundle; public interface MyClientBundle extends ClientBundle { public static final MyClientBundle INSTANCE = GWT.create(MyClientBundle.class); @Override @Source("path/to/myStyleSheet.css") MyCssResource myCssResource(); }
CssResource Stub
import com.google.gwt.resources.client.CssResource; public interface MyCssResource extends CssResource { @ClassName("myCssClassName") String myCssClassName(); @ClassName("myOtherName") String myOtherCssClassName(); }
样式表存根
.myCssClassName { background-color: magenta; /* Yes, you will see when it is working. */ } @external .myOtherName { background-color: yellow; }
样式存根(使用ClientBundle)
import com.google.gwt.user.cellview.client.CellTable.Style; public class MyStyle implements Style { public static final MyStyle INSTANCE = new MyStyle(); @Override public boolean ensureInjected() { return false; } @Override public String cellTableCell() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableEvenRow() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableEvenRowCell() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableOddRow() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableOddRowCell() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableFirstColumn() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableFirstColumnFooter() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableFirstColumnHeader() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableFooter() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableHeader() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableHoveredRow() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableHoveredRowCell() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableKeyboardSelectedCell() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableKeyboardSelectedRow() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableKeyboardSelectedRowCell() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableLastColumn() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableLastColumnFooter() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableLastColumnHeader() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableLoading() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableSelectedRow() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableSelectedRowCell() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableSortableHeader() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableSortedHeaderAscending() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableSortedHeaderDescending() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String cellTableWidget() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String getName() { return MyCssResource.INSTANCE.myCssClassName(); } @Override public String getText() { return MyCssResource.INSTANCE.myCssClassName(); } }
那应该是它。 我确信还有其他方法可以做同样的事情,但到目前为止这对我来说效果很好。 祝你好运,我希望这能节省你一些时间。