我無法弄清楚如何將雙擊事件添加到CellTable的單元格中。在CellTable單元格中添加雙擊事件 - GWT
GWT CellTable可能嗎?
有任何解決方法
謝謝你..
人
BTW,我看到了這個帖子,但沒有迴應... http://www.devcomments.com/Adding-DoubleClicks-and-OnContextMenu-to-CellTable-at1066168.htm
我無法弄清楚如何將雙擊事件添加到CellTable的單元格中。在CellTable單元格中添加雙擊事件 - GWT
GWT CellTable可能嗎?
有任何解決方法
謝謝你..
人
BTW,我看到了這個帖子,但沒有迴應... http://www.devcomments.com/Adding-DoubleClicks-and-OnContextMenu-to-CellTable-at1066168.htm
如果你想要一個文本你可以使用這個:
public class EventfulTextCell extends AbstractSafeHtmlCell`<String`> {
private static final String[] NO_CONSUMED_EVENTS = null;
public EventfulTextCell() {
this(NO_CONSUMED_EVENTS);
}
public EventfulTextCell(String... consumedEvents) {
super(SimpleSafeHtmlRenderer.getInstance(), consumedEvents);
}
@Override
public void render(Context context, SafeHtml value, SafeHtmlBuilder sb) {
if (value != null) {
sb.append(value);
}
}
}
然後,你實例化它:
new EventfulTextCell("click", "dblclick")
然後覆蓋onBrowserEvent()方法來處理您的事件。
我製作不同的東西,只是適合我的需要:
cellTable.addCellPreviewHandler(new Handler<TitoloProxy>() {
long lastClick=-1000;
@Override
public void onCellPreview(CellPreviewEvent<TitoloProxy> event) {
long clictAt = System.currentTimeMillis();
GWT.log("clickAt: "+(clictAt));
GWT.log("lastClick: "+(lastClick));
if(event.getNativeEvent().getType().contains("click")){
GWT.log(""+(clictAt-lastClick));
if(clictAt-lastClick < 300) { // dblclick on 2 clicks detected within 300 ms
Window.alert("I am a double click crafted event!");
}
lastClick = System.currentTimeMillis();
}
}
});
更可以使用優雅的事件類型檢查來代替`event.getNativeEvent()。getType()。contains(「click」)``。嘗試`Event.getTypeInt(event.getNativeEvent()。getType())== Event.ONCLICK`,用與所需事件相對應的枚舉替換Event.ONCLICK`(使用GWT 2.4進行測試)。 – 2012-02-06 16:15:18
這不支持parrellel中的單擊事件=( – 2012-09-12 18:43:26
@SuperKakes你是對的,但如果你使用Boris解決方案,你將能夠區分單擊和雙擊,如果你仍然想使用我的解決方案,你可以區分單個並雙擊.contains(「click」)測試,我沒有嘗試過, – 2012-10-11 14:29:33
cellTable.addDomHandler(new DoubleClickHandler() {
@Override
public void onDoubleClick(DoubleClickEvent event) {
Window.alert("That's it!");
}
}, DoubleClickEvent.getType());
因爲CellPreview接口本身不捕捉雙擊事件,你將需要添加事件邏輯到重寫onCellPreview方法。首先你會認爲最好的辦法是檢查點擊時間差異。但是,使用狀態機和點擊次數會更加高效和優雅。這更強大,可以處理多個事件 - 例如鼠標懸停,單擊和雙擊。代碼非常簡單。所以享受!
public class CellHoverHandler implements Handler<T> {
Timer singleClickTimer;
int clickCount = 0;
int clickDelay = 300;
@Override
public void onCellPreview(final CellPreviewEvent<T> event) {
if (Event.getTypeInt(event.getNativeEvent().getType()) == Event.ONMOUSEOVER) {
handleOnMouseOver(event);
} else if (Event.getTypeInt(event.getNativeEvent().getType()) == Event.ONCLICK) {
clickCount++;
if (clickCount == 1) {
singleClickTimer = new Timer() {
@Override
public void run() {
clickCount = 0;
handleOnClick(event);
}
};
singleClickTimer.schedule(clickDelay);
} else if (clickCount == 2) {
singleClickTimer.cancel();
clickCount = 0;
handleOnDblClick(event);
}
}
}
private void handleOnMouseOver(CellPreviewEvent<T> event) {
Element cell = event.getNativeEvent().getEventTarget().cast();
GWT.log("mouse over event");
}
private void handleOnClick(CellPreviewEvent<T> event) {
Element cell = event.getNativeEvent().getEventTarget().cast();
GWT.log("click event");
}
private void handleOnDblClick(CellPreviewEvent<T> event) {
Element cell = event.getNativeEvent().getEventTarget().cast();
GWT.log("double click event");
}
優化:隨意將計數,計時器和延遲作爲靜態類成員或全局成員來重用。在創建新實例之前,還要檢查計時器是否爲空。爲簡單起見,我忽略了這一點。與許多其他技術不同,這種方式仍然可以讓您輕鬆直接訪問單元格事件。重載AbstractCell的技術也很有效,但是有時候你實際上沒有定製單元,或者想要定製單元來處理單元上的事件。
Integer row=0;// to hold row index
Integer column=0;// to hold column index
_Grid.addCellPreviewHandler(new CellPreviewEvent.Handler<Model>() {
// this is to handle row id
@Override
public void onCellPreview(final CellPreviewEvent<Model> event) {
if (BrowserEvents.CLICK.equalsIgnoreCase(event.getNativeEvent().getType())) {
row = event.getIndex();
column=event.getColumn();
}
}
});
// because Doubleclick handler doesn't give row index or column index we will use addCellPreviewHandler to return row index or column index.
_Grid.addDomHandler(new DoubleClickHandler() {
@Override
public void onDoubleClick(final DoubleClickEvent event) {
System.out.println(" You clicked row = " + row);
System.out.println(" You clicked column = " + column);
}
}, DoubleClickEvent.getType());
對於小區列表,此代碼的工作確定:
cellList.addDomHandler(new DoubleClickHandler() {
@Override
public void onDoubleClick(DoubleClickEvent event) {
// do the stuff
}
}, DoubleClickEvent.getType());
我不知道有關表格單元格
這是國際海事組織的做事混亂的方式,但它工作 – 2012-09-05 18:14:51