设置SWT工具提示延迟

时间:2009-08-29 11:49:14

标签: java swt tooltip

是否可以更改SWT中的工具提示延迟? 在Swing中,我通常会使用Tooltip.sharedInstance()中的方法。这似乎在SWT中破裂了。

3 个答案:

答案 0 :(得分:6)

我使用下面的内容。感谢@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");

答案 1 :(得分:3)

您可以使用以下内容:

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 :(得分:2)

不,不是我所知道的。工具提示与底层本机系统的工具提示紧密耦合,因此您会遇到他们的行为。

但还有另一种方法,你必须自己实施工具提示。使用这种方法,您可以创建非常复杂的工具提示。

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 );
    }
}