我有一种情况,当用户点击我的UI中的某些内容(可以是网格,标签等)时,我希望显示某些内容。我想要的是显示一个类似于触发悬停事件时显示的小方框。但是,我只想在点击时显示它,而不是悬停。有没有办法做到这一点没有很多麻烦?我知道我总是可以创建一个小弹出窗口,但悬停文本正是我需要的,并且智能地处理弹出窗口的位置(我认为使用Window需要更多的工作)。
答案 0 :(得分:4)
我认为没有一种简单的方法可以做到这一点。这是我们使用的智能弹出类:
public class SmartPopup extends PopupPanel {
public void show(int left, int top) {
setPopupPositionAndShow(new PositionCallback() {
@Override
public void setPosition(int offsetWidth, int offsetHeight) {
int popupLeft = left;
if ((offsetWidth + left > Window.getClientWidth())
&& (left - offsetWidth > 0)) {
popupLeft = left - offsetWidth;
}
int popupTop = top;
if ((top + offsetHeight > Window.getClientHeight())
&& (top - offsetHeight > 0)) {
popupTop = top - offsetHeight;
}
setPopupPosition(popupLeft, popupTop);
}
});
}
}
一旦你有这样的课程,你可以扩展它以获得你的工具提示样式,自动包含标签等......
public class ToolTip extends SmartPopup {
public ToolTip(String message) {
addStyleName("tool-tip-css");
add(new Label(message));
}
}
然后,从那里你的代码将非常简单:
yourButtonOrWhatever.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
ToolTip toolTip = new ToolTip("Hey, this is like a tool-tip for clicking!");
toolTip.show(event.getClientX(), event.getClientY());
}
});
我喜欢写课程,以至于我甚至可能会创建ClickHandler
的特殊子类,所以我不必一遍又一遍地输入这些行......
yourButtonOrWhatever.addClickHandler(new ToolTipHandler("Hey, this is like a tool-tip for clicking!"));
答案 1 :(得分:1)
为什么不使用此点击事件处理程序
onClickTooltip(com.smartgwt.client.widgets.events.ClickEvent event) {
int x = event.getX();
int y = event.getY();
final Canvas w = new Canvas();
w.setRect(x,y,72,72);
w.setContents("I am Here");
w.draw();
}