package testsnippets; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; public class htmlTooltipSnippet { public static void main (String[] args) { final Display display = new Display (); final Shell shell = new Shell (display); shell.setLayout (new FillLayout ()); final Table table = new Table (shell, SWT.BORDER); for (int i = 0; i < 20; i++) { TableItem item = new TableItem (table, SWT.NONE); item.setText ("item " + i); } // Disable native tooltip table.setToolTipText (""); // Implement a "fake" tooltip final Listener browserListener = new Listener () { public void handleEvent (Event event) { Browser browser = (Browser)event.widget; Shell shell = browser.getShell (); switch (event.type) { case SWT.MouseDown: Event e = new Event (); e.item = (TableItem) browser.getData ("_TABLEITEM"); table.setSelection (new TableItem [] {(TableItem) e.item}); table.notifyListeners (SWT.Selection, e); shell.dispose (); table.setFocus(); break; case SWT.MouseExit: shell.dispose (); break; } } }; Listener tableListener = new Listener () { Shell tip = null; Browser browser = null; public void handleEvent (Event event) { switch (event.type) { case SWT.MouseMove: case SWT.Dispose: case SWT.KeyDown: { if (tip == null) break; tip.dispose (); break; } case SWT.MouseHover: { TableItem item = table.getItem (new Point (event.x, event.y)); if (item != null) { if (tip != null && !tip.isDisposed ()) tip.dispose (); tip = new Shell (shell, SWT.ON_TOP | SWT.NO_FOCUS | SWT.TOOL); tip.setBackground (display.getSystemColor (SWT.COLOR_INFO_BACKGROUND)); GridLayout l = new GridLayout(1,false); l.horizontalSpacing=0; l.marginWidth=0; l.marginHeight=0; l.verticalSpacing=0; tip.setLayout(l); String htmlText = "

  Here is some html text ***************.

  This is tooltip text ****************.  

"; browser = new Browser (tip, SWT.NONE); browser.setForeground (display.getSystemColor (SWT.COLOR_INFO_FOREGROUND)); browser.setBackground (display.getSystemColor (SWT.COLOR_INFO_BACKGROUND)); browser.setData ("_TABLEITEM", item); browser.setText (htmlText); browser.addListener (SWT.MouseExit, browserListener); browser.addListener (SWT.MouseDown, browserListener); browser.setLayoutData(new GridData(220,90)); Point size = tip.computeSize (SWT.DEFAULT, SWT.DEFAULT); //Point size = browser.computeSize (SWT.DEFAULT, SWT.DEFAULT); //Point size = tip.getSize(); Point pt = table.toDisplay (event.x, event.y); tip.setBounds (pt.x, pt.y, size.x, size.y); tip.setVisible (true); } } } } }; table.addListener (SWT.Dispose, tableListener); table.addListener (SWT.KeyDown, tableListener); table.addListener (SWT.MouseMove, tableListener); table.addListener (SWT.MouseHover, tableListener); shell.pack (); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } }