#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 });
}