2009-08-29 21 views

答えて

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); 
    } 
} 
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)に電話するまで、チップを強制的に押し続けます。

5

私は以下のようなものを使用します。 @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");

関連する問題