2012-06-26 4 views
0

Я хочу сделать что-то вроде этого: Я хочу таблицу ячеек, в которой каждая ячейка является классом, который я написал. Мне нужно добавить событие click для таблицы ячеек. Итак, как я могу получить, какая ячейка была нажата. Поскольку Cell является классом, который я определил, на основе щелкнутой ячейки мне нужно выполнить какое-либо действие. Могу ли я каким-либо образом получить детали объекта ячейки, которые были нажаты. Для напримерОбработка событий в GWT

мне нужен лист первенствовать, который, как ячейки таблицы, каждая ячейка в листе первенствовать класс я определил, скажем, класс имеет значения, как:

CellClass{ 
boolean isempty; 
string name; 
int id; 
} 

Теперь, если я нажимаю в лист excel, как я могу получить, какая ячейка была нажата, чтобы я мог указать пользователю имя ячейки и пустое или нет.

ответ

0

Используйте ClickableTextCell для создания интерактивной ячейки. См. Ниже Код детали:

nameCell = new ClickableTextCell() { 
      @Override 
      public void render(com.google.gwt.cell.client.Cell.Context context, 
        String data, SafeHtmlBuilder sb) { 
       super.render(context, "", sb); 

        sb.appendHtmlConstant("<input type=text value='"+data+"' />); 

     }; 

     nameColumn = new Column<Document, String>(nameCell) { 

      @Override 
      public String getValue(Document object) { 
       //code 
      } 
     }; 
0

Обратите внимание, что для каждого столбца имеется только один экземпляр ячейки, а не каждое значение представлено экземпляром ячейки. Структура, описанная выше, будет структурой данных, которые вы установили в CellTable.setRowData.

A Cell должен объявить интересующие события, через суперструктор в AbstractCell или метод getConsumedEvents, определенный в Cell. В вашем случае событие «click».

Затем вы можете реализовать метод onBrowserEvent в своей пользовательской ячейке и отреагировать на клик. Контекст будет передан этому методу, указав, к какой строке и столбцу относится событие (см. Cell.Context), а также ключ и значение, связанные с кликом.

В вашем случае, обычай Cell будет выглядеть примерно так:

public class MyCell extends AbstractCell<String> { 
    public MyCell() { 
     super("click"); 
    } 

    @Override 
    public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { 
     // Handle the click event. 
     if ("click".equals(event.getType())) { 
      // Ignore clicks that occur outside of the outermost element. 
      EventTarget eventTarget = event.getEventTarget(); 
      if (parent.getFirstChildElement().isOrHasChild(Element.as(eventTarget))) { 
       doAction(value, valueUpdater); 
      } 
     } 
    } 
} 

Вы также можете перехватывать событие на Column уровне.

Дополнительную информацию см. В Dev Guide

Смежные вопросы