Получить ячейку (строка, столбец) в GWT htmlTable

#gwt #html-table #flextable

#gwt #html-таблица #гибкий

Вопрос:

В htmlTable такого метода нет:

 Cell c =  getCell(row,col);
  

Какой наиболее эффективный способ получения ячейки в таблице HTML / Flex с учетом строки и столбца?

Комментарии:

1.следовало спросить об этом перед ответом, но лучше поздно, чем никогда: вы говорите о com.google.gwt.user.client.ui.HTMLTable.Cell com.google.gwt.cell.client.Cell<C> ?

Ответ №1:

Зависит от того, что вы хотите сделать.

Если вы хотите прочитать / записать содержимое ячейки, вы можете использовать HTMLTable#setText(int,int) и HTMLTable#getText(int,int) , или HTMLTable#setWidget(int,int) и HTMLTable#getWidget(int,int) , если содержимое ячейки является виджетом.

Есть больше функций для чтения / записи свойств ячейки в HtmlTable.CellFormatter (ссылка на gwt javadoc) и ее подклассах — вы можете получить ее с помощью HTMLTable#getCellFormatter() и, возможно, преобразовать ее, в зависимости от используемой вами реализации HTMLTable . с помощью средства форматирования ячеек вы можете, например, устанавливать / удалять стили, атрибуты или получать базовую информацию Element (ссылка на gwt javadoc) для еще более прямого управления.

Комментарии:

1. Я не прошу альтернатив ячейке. У меня есть причины для получения ячейки, причины, выходящие за рамки этого обсуждения.

Ответ №2:

htmlTable имеет следующие методы:

  • HTMLTable#isCellPresent(int row, int column)
  • HTMLTable#getWidget(int row, int column)

Вы могли бы написать служебный метод, используя их оба следующим образом:

 public static Cell<?> getCell(HTMLTable table, int row, int column) {
    if (table != null amp;amp; table.isCellPresent(row, column)) {
        Widget widget = table.getWidget(row, column);
        if (widget instanceof Cell) {
            return (Cell<?>) widget;
        }
    }
    return null;
}
  

Комментарии:

1. Это не сработает, потому что Cell — это интерфейс к TD, а не виджет. например, TextInputCell — это реализация Cell. В моей htmlTable нет виджетов.

2. У вас есть пример? Если вы используете htmlTable. Ячейка предназначена только для HTMLTable#getCellForEvent и все add(...) виджеты в HTMLTable принимают IsWidget в качестве параметра? Если вы используете HTMLTable.Cell , вам нужно предоставить конструктор и объединить его с некоторым приведением (например, TableElement table = TableElement.as(htmlTable.getElement() ) и выполнить итерацию по нему, чтобы воссоздать свою ячейку.

Ответ №3:

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

 Ext.QuickTips.init();   
  grid_plancode.on('mouseover', mouseOver);


function mouseOver(e, tar){
  var t = e.getTarget();
  var overCell = grid_plancode.getView().findCellIndex(t);
  var overRow = grid_plancode.getView().findRowIndex(t); 
var selectedText=grid_plancode.getView().getCell(overRow, overCell);
           if(overCell !== false amp;amp; overRow !== false) {
Ext.QuickTips.register({target:tar,title:'Value', text:selectedText. innerText }); 
}