Как дублировать внешний вид / функциональность текста при наведении курсора SmartGWT - PullRequest
2 голосов
/ 20 ноября 2011

У меня есть ситуация, когда я хочу, чтобы что-то отображалось, когда пользователь нажимает на что-то в моем пользовательском интерфейсе (это может быть сетка, метка и т. Д.). Я хочу, чтобы отображалось маленькое поле, похожее на то, что отображается при запуске события наведения мыши. Тем не менее, я хочу показать его только по щелчку, а не при наведении. Есть ли способ сделать это без особых проблем? Я знаю, что всегда мог создать небольшое всплывающее окно, но текст при наведении курсора именно то, что мне нужно, и разумно обрабатывает местоположение всплывающего окна (которое, я думаю, потребовало бы гораздо больше работы с использованием окна).

Ответы [ 2 ]

4 голосов
/ 20 ноября 2011

Я не думаю, что есть простой способ сделать это. Вот умный класс всплывающих окон, который мы используем:

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 голос
/ 21 ноября 2011

Почему бы не использовать этот обработчик событий клика

</p> <pre> 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(); } </pre> <p>

...