2012-06-26 10 views
0

다음과 같이하고 싶습니다. 각 셀이 내가 작성한 클래스 인 셀 테이블이 필요합니다. 셀 테이블에 대한 클릭 이벤트를 추가해야합니다. 그렇다면 어떻게 셀을 클릭 할 수 있습니까? Cell은 내가 정의한 클래스이므로 클릭 한 셀을 기반으로 몇 가지 작업을 수행해야합니다. 클릭 한 셀의 객체 세부 정보를 어떻게 든 얻을 수 있습니까? 난에서 클릭하면 이제GWT의 이벤트 처리

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

: 예

를 들어 I 셀 테이블처럼 엑셀 시트를 필요 엑셀 시트의 각 셀은 클래스가 같은 값을 가지고 말을 내가 정의한 클래스이며, 엑셀 시트, 어떻게 셀을 클릭했는지 알 수 있으므로 셀의 이름과 비어 있는지 여부를 사용자에게 알릴 수 있습니다.

답변

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

각 열에 대해 하나의 셀 인스턴스 만 존재하며 모든 값이 Cell 인스턴스로 나타내지는 않습니다. 위에서 설명한 구조는 CellTable.setRowData에서 설정 한 데이터의 구조입니다.

셀은 AbstractCell 또는 메서드의 슈퍼 생성자를 통해 Cell에 정의 된 이벤트를 선언해야합니다. 귀하의 경우에는 "클릭"이벤트.

그런 다음 사용자 지정 셀에 onBrowserEvent 메서드를 구현하고 클릭에 반응 할 수 있습니다. 컨텍스트는이 메서드에 전달되어 이벤트가 참조하는 행과 열 (Cell.Context 참조)과 클릭과 관련된 키와 값을 나타냅니다.

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

에서 찾을 수 있습니다.