Новый GWT 2.4 DataGrid не стилизует ошибку аннотаций?

Я следовал примеру кода, приведенному в более ранней публикации. относительно стиля GWT CellTables, копируя код для новых GWT 2.4 DataGrids. К сожалению, ничего не помогло. Все, что я хочу сделать, это уменьшить размер шрифта ячеек, поэтому в моем локальном файле CSS (см. Второй параметр аннотации @Source в связанном сообщении) я включил:

.dataGridCell {
    font-size: 6px;
}

Ничего не случилось. Размер шрифта упорно отказывался меняться. Затем я заметил это в коде DataGrid:

  @ImportedWithPrefix("gwt-CellTable")
  public interface Style extends CssResource {

Я скопировал DataGrid в свою рабочую область вместе с тремя связанными файлами gif и закомментировал одну зависимость от защищенного метода в AbstractCellTable (без виджетов пустой таблицы — да ладно). Я изменил префикс, указанный в аннотации, на gwt-DataGrid — и пфффф! -- все равно не получилось.

Итак, что мне здесь не хватает? Верен ли этот префикс gwt-CellTable в аннотации? Мне кажется подозрительным, хотя мне не удалось заставить его работать с моим изменением.


Оказывается, имена имеют значение. Да!

Хорошо, заработало. Оказывается, важно использовать одни и те же имена. Да!

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.cellview.client.DataGrid;
import com.google.gwt.user.cellview.client.DataGrid.Style;
import com.google.gwt.user.cellview.client.DataGrid.Resources;

public interface MyDataGridResources extends Resources {

  public static final MyDataGridResources INSTANCE = GWT.create(MyDataGridResources.class);

  @Override
  @Source({DataGrid.Style.DEFAULT_CSS, "../resources/styling/mydatagridstyles.css"})
  Style dataGridStyle();  // ***********************

}

Когда я сделал имя стиля таким же, как имя интерфейса стиля в DataGrid.java ("dataGridStyle"), он начал работать.

вроде понял... но не совсем. Мне нужно больше подумать о правилах области видимости, а также точно изучить, что происходит с параметром ресурсов, переданным в конструктор DataGrid.


person Steve J    schedule 09.09.2011    source источник
comment
Оказывается, важно использовать одни и те же имена - понятия не имею, что вы говорите. Вы хотели сказать, что имя файла css должно быть одинаковым? Я так не думаю. Вы имели в виду, что имена стилей должны быть такими же, как и в оригинале? - Конечно! В противном случае, как GWT узнает, какое имя стиля использовать, если вы специально не установите новое имя стиля для каждого из множества элементов.   -  person Blessed Geek    schedule 03.12.2011


Ответы (3)


Я просто сделал это, как описано в сообщении , на которое вы ссылаетесь. на, и он работает так, как ожидалось. Мой класс Resources выглядит так:

import com.google.gwt.user.cellview.client.DataGrid;
import com.google.gwt.user.cellview.client.DataGrid.Resources;

public interface CustomDataGridResources extends Resources {

    @Source({DataGrid.Style.DEFAULT_CSS, "../resources/customDataGrid.css"})
    CustomStyle dataGridStyle();

    interface CustomStyle extends DataGrid.Style {

    }

}

А затем используйте этот класс при создании экземпляра DataGrid:

    DataGrid.Resources resources = GWT.create(CustomDataGridResources.class);
    gridUnits = new DataGrid<Unit>(50, resources, new UnitKeyProvider());
person tsauerwein    schedule 12.09.2011
comment
Спасибо, что попробовали. Это мне очень помогает, так как я знаю, что, должно быть, делаю что-то не так, а не иду по ложному пути. Быстрый вопрос. Нужно ли вам вызывать sureInjected() для стилей в пакете ресурсов, который вы предоставляете DataGrid, или это делается за вас? Или, может быть, этот вопрос не имеет смысла по какой-то причине, о которой я не знаю. Я начну просматривать свой код. - person Steve J; 12.09.2011
comment
Нет, я не использую ensureInjected(). Все, что я делаю, это передаю экземпляр конструктору DataGrid. - person tsauerwein; 12.09.2011
comment
Хорошо, заработало. Оказывается, важно использовать одни и те же имена. Да! См. выше. - person Steve J; 12.09.2011
comment
Дарнит, наполовину рабочий. Помещение .dataGridCell {font-size: 80% } в мою таблицу стилей правильно уменьшает шрифты. Ура! Но .dataGridEvenRow {background: #ff0000} ничего не сделал с цветом. По сути, я хочу иметь возможность окрашивать столбец, но добавление стиля столбца с цветом фона влияет только на ячейку заголовка. Ячейки основного содержимого, похоже, предпочитают серо-белые цвета всему остальному. - person Steve J; 12.09.2011
comment
Изменение цвета фона в .dataGridEvenRow и .dataGridOddRow работает для меня. Может быть, какой-то другой стиль CSS мешает? - person tsauerwein; 13.09.2011

Когда вы перезаписываете стиль, заданный файлом CSS GWT, вам нужно добавить «!important» в собственное определение CSS. Нравится:

.dataGridCell {
    font-size: 6px !important;
}
.dataGridEvenRow {
    background: #ff0000 !important;
}
person Andrei Volgin    schedule 14.09.2011

будьте осторожны при использовании линии

@Source({DataGrid.Style.DEFAULT_CSS, "../resources/customDataGrid.css"})

это означает, что gwt использует как стандартный, так и ваш собственный css. я знаю, что это так закодировано, но когда вы используете копирование и вставку, вы можете запутаться, как и я, почему у вас оба стиля вместе.

person Lego    schedule 02.02.2012