How can I add a MouseOutHandler to a FlexTable cell?

150 views
Skip to first unread message

Eduardo Nunes

unread,
Jun 12, 2009, 1:52:09 PM6/12/09
to Google-We...@googlegroups.com
Well, the subject says everything, I would like to know how can I add
a MouseOutHandler to a FlexTable cell. I tried a lot of things but
none of them with success. I tried a wrap class:

private class FlexTableTd extends Widget implements HasMouseOutHandlers,
HasMouseOverHandlers {

public FlexTableTd(Element element) {
setElement(element);
}

public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) {
return addHandler(handler, MouseOutEvent.getType());
}

public HandlerRegistration
addMouseOverHandler(MouseOverHandler handler) {
return addHandler(handler, MouseOverEvent.getType());
}
}

and I tried

FlexTableTd td = new FlexTableTd(table.getFlexCellFormatter().getElement(0, 0));
td.addMouseOverHandler(...);

but it doesn't work.

--
Eduardo S. Nunes
http://e-nunes.com.br

matthew jones

unread,
Jun 12, 2009, 3:46:37 PM6/12/09
to Google Web Toolkit
Try this instead.

addMouseOverHandler(MouseOverHandler handler) {
return addDomHandler(handler, MouseOverEvent.getType());

Eduardo Nunes

unread,
Jun 12, 2009, 4:40:12 PM6/12/09
to Google-We...@googlegroups.com
I already tried it, but it didn't work. I found a solution, but a very ugly one:

private class FlexTableTd extends UIObject implements HasMouseOutHandlers,
HasMouseOverHandlers, EventListener {

public FlexTableTd(Element element) {
this.setElement(element);
DOM.setEventListener(this.getElement(), this);
}

public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) {
this.sinkEvents(Event.ONMOUSEOUT);
return
ensureHandlers().addHandler(MouseOutEvent.getType(), handler);
}

public HandlerRegistration
addMouseOverHandler(MouseOverHandler handler) {
this.sinkEvents(Event.ONMOUSEOVER);
return
ensureHandlers().addHandler(MouseOverEvent.getType(), handler);
}

public void fireEvent(GwtEvent<?> event) {
ensureHandlers().fireEvent(event);
}

public void onBrowserEvent(Event event) {
switch (DOM.eventGetType(event)) {
case Event.ONMOUSEOVER:
case Event.ONMOUSEOUT:
Element related = event.getRelatedTarget();
if (related != null && getElement().isOrHasChild(related)) {
return;
}
break;
}
DomEvent.fireNativeEvent(event, this, this.getElement());
}
private HandlerManager handlerManager;

HandlerManager ensureHandlers() {
return handlerManager == null ? handlerManager = new
HandlerManager(this)
: handlerManager;

Kelo

unread,
Jun 12, 2009, 9:19:44 PM6/12/09
to Google Web Toolkit
Hi Eduardo,

Here's your solution:

public class BocaJrsTable extends FlexTable implements
HasMouseOutHandlers {

private HandlerManager manager = new HandlerManager(this);

public BocaJrsTable(){
super();
addDomHandler(new MouseOutHandler() {
@Override
public void onMouseOut(MouseOutEvent event) {
fireEvent(event);
}
}, MouseOutEvent.getType());

}

@Override
public HandlerRegistration addMouseOutHandler(MouseOutHandler
handler) {
return manager.addHandler(MouseOutEvent.getType(), handler);
}


@Override
public void fireEvent(GwtEvent<?> event) {
manager.fireEvent(event);
}

}

Good luck !

Dean S. Jones

unread,
Jun 15, 2009, 8:21:36 PM6/15/09
to Google Web Toolkit
Thanks for the example - I have to support 1.5 and 1.6 - so I am still
coding to the old event model...

But it's nice to see looking inside HandlerManager that they defer
editing of the "handler list" while the event it firing.

Ravi

unread,
Jun 16, 2009, 4:41:06 AM6/16/09
to Google Web Toolkit
How to find out the row number on which mouseEvent has occured(in
Kelo's example)???

Wimpog

unread,
Aug 7, 2009, 10:51:44 PM8/7/09
to Google Web Toolkit
I would also like to know how to find out which row mouseEvent has
occurred....

lowecg2004

unread,
Aug 11, 2009, 7:05:39 PM8/11/09
to Google Web Toolkit
Based on Kelo's example above:

public class BocaJrsTable extends FlexTable implements
HasMouseOutHandlers {

// ... as above, but add the following:

public int[] getCellForEvent(final MouseEvent<?> event) {
final Element td = getEventTargetCell(Event.as(event.getNativeEvent
()));

if (td == null) {
return null;
}

final Element tr = DOM.getParent(td);
final Element body = DOM.getParent(tr);

final int r = DOM.getChildIndex(body, tr);
final int c = DOM.getChildIndex(tr, td);

final int[] idx = new int[] { r, c };

return idx;
}

}


someTable = new BocaJrsTable();


someTable.addMouseOverHandler(new MouseOverHandler() {

@Override
public void onMouseOver(final MouseOverEvent event) {
final int r = row(event);

...


}}
);



public static int row(final MouseEvent<?> event) {
// note that in general, events can have sources that are not
Widgets.
BocaJrsTable sender = (BocaJrsTable) event.getSource();

final int[] idx = sender.getCellForEvent(event);

if (idx == null) {
return -1;
}

return idx[0];
}

I hope that helps,.

Cheers,

C.
Reply all
Reply to author
Forward
0 new messages