Настройка задержек всплывающей подсказки SWT - PullRequest
1 голос
/ 29 августа 2009

Можно ли изменить задержку всплывающей подсказки в SWT? В Swing я обычно использовал бы методы в Tooltip.sharedInstance (). Похоже, что это сломалось в SWT.

Ответы [ 3 ]

6 голосов
/ 10 августа 2012

Я использую что-то вроде ниже. Благодаря @Baz:)

public class SwtUtils {

    final static int TOOLTIP_HIDE_DELAY = 300;   // 0.3s
    final static int TOOLTIP_SHOW_DELAY = 1000;  // 1.0s

    public static void tooltip(final Control c, String tooltipText, String tooltipMessage) {

        final ToolTip tip = new ToolTip(c.getShell(), SWT.BALLOON);
        tip.setText(tooltipText);
        tip.setMessage(tooltipMessage);
        tip.setAutoHide(false);

        c.addListener(SWT.MouseHover, new Listener() {
            public void handleEvent(Event event) {
                tip.getDisplay().timerExec(TOOLTIP_SHOW_DELAY, new Runnable() {
                    public void run() {
                        tip.setVisible(true);
                    }
                });             
            }
        });

        c.addListener(SWT.MouseExit, new Listener() {
            public void handleEvent(Event event) {
                tip.getDisplay().timerExec(TOOLTIP_HIDE_DELAY, new Runnable() {
                    public void run() {
                        tip.setVisible(false);
                    }
                });
            }
        });
    }
}

Пример использования: SwtUtils.tooltip(button, "Text", "Message");

3 голосов
/ 05 июля 2012

Вы можете использовать следующее:

ToolTip tip = new ToolTip(shell, SWT.BALLOON | SWT.ICON_INFORMATION);
tip.setText("Title");
tip.setMessage("Message");
tip.setAutoHide(false);

Затем, когда вы захотите показать его, используйте tip.setVisible(true) и запустите таймер, который будет вызывать tip.setVisible(false) по истечении указанного времени.

tip.setAutoHide(false) заставляет чаевые оставаться, пока вы не позвоните tip.setVisible(false).

2 голосов
/ 30 августа 2009

Нет, не так далеко, как я знаю. Подсказки тесно связаны со всплывающими подсказками базовой системы, поэтому вы застряли в их поведении.

Но есть и другой способ, вам бы пришлось самостоятельно реализовывать подсказки. При таком подходе вы можете создавать очень сложные всплывающие подсказки.

class TooltipHandler {
    Shell tipShell;

    public TooltipHandler( Shell parent ) {
        tipShell = new Shell( parent, SWT.TOOL | SWT.ON_TOP );

        <your components>

        tipShell.pack();
        tipShell.setVisible( false );
    }

    public void showTooltip( int x, int y ) {
        tipShell.setLocation( x, y );
        tipShell.setVisible( true );
    }

    public void hideTooltip() {
        tipShell.setVisible( false );
    }
}
...