Я знаю, как это может быть неприятно, я был в том же месте. Я включил все шаги, которые я использовал, чтобы заставить это работать. Но, похоже, вы почти у цели, поэтому вам, вероятно, не понадобится все это.
Как вы уже упоминали, чтобы использовать собственные имена классов CSS, вы должны реализовать com.google.gwt.user.cellview.client.CellTable.Resources и передать экземпляр вашего класса в конструктор CellTable.
Объявление CellTable
CellTable<MyData> myCellTable = new CellTable<MyData>(10, MyResources.INSTANCE);
Для реализации ресурсов также требуется экземпляр 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
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» в соответствии с вашей конкретной таблицей стилей.
Ссылка на таблицу стилей
<link href="myStyleSheet.css" rel="stylesheet" type="text/css">
Теперь, если вы хотите внедрить свои стили с помощью ClientBundle, у вас есть несколько дополнительных шагов.
Во-первых, убедитесь, что в какой-то момент вы вводите таблицу стилей; это действительно легко забыть. Простое место в EntryPoint вашего модуля, так что вы можете быть уверены, что он вызывается.
CssResource Injection
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.<MyClientBundle>create(MyClientBundle.class);
@Override @Source("path/to/myStyleSheet.css") MyCssResource myCssResource();
}
Заглушка CssResource
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();
}
}
Так и должно быть. Я уверен, что есть другие способы сделать то же самое, но до сих пор это работало хорошо для меня. Удачи, и я надеюсь, что это сэкономит вам время.