import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /** * @author Thomas Singer */ public class MouseOverTest { public static void main(String[] args) { final Display display = new Display(); final Shell shell = new Shell(display); shell.setLayout(new FillLayout()); final Composite composite = new Composite(shell, SWT.NONE); final Label label = new Label(composite, SWT.NONE); label.setText("<- move here to see magenta"); final Point labelSize = label.computeSize(SWT.DEFAULT, SWT.DEFAULT); label.setSize(labelSize); label.setLocation(50, 0); final Listener listener = new Listener() { private boolean mouseOver; @Override public void handleEvent(Event event) { if (event.type == SWT.Paint) { event.gc.setBackground(mouseOver ? display.getSystemColor(SWT.COLOR_MAGENTA) : composite.getBackground()); event.gc.fillRectangle(0, 0, composite.getSize().x, labelSize.y); } else if (event.type == SWT.MouseEnter || event.type == SWT.MouseMove || event.type == SWT.MouseExit) { final boolean mouseOver = event.x >= 0 && event.x <= 50 && event.y >= 0 && event.y <= labelSize.y; if (this.mouseOver == mouseOver) { return; } this.mouseOver = mouseOver; composite.redraw(); } } }; composite.addListener(SWT.Paint, listener); composite.addListener(SWT.MouseEnter, listener); composite.addListener(SWT.MouseMove, listener); composite.addListener(SWT.MouseExit, listener); shell.setSize(400, 300); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } }