如何在执行单击时复制SmartGWT悬停文本的外观/功能

时间:2011-11-20 17:02:15

标签: java gwt user-interface popup smartgwt

我有一种情况,当用户点击我的UI中的某些内容(可以是网格,标签等)时,我希望显示某些内容。我想要的是显示一个类似于触发悬停事件时显示的小方框。但是,我只想在点击时显示它,而不是悬停。有没有办法做到这一点没有很多麻烦?我知道我总是可以创建一个小弹出窗口,但悬停文本正是我需要的,并且智能地处理弹出窗口的位置(我认为使用Window需要更多的工作)。

2 个答案:

答案 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();

        }