package com.netifera.platform.ui.graphs.utils; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; import java.awt.Frame; import java.awt.Panel; import javax.swing.JRootPane; import org.eclipse.swt.SWT; import org.eclipse.swt.awt.SWT_AWT; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Composite; abstract public class AWTEmbeddedControl extends Composite { protected Component embeddee; public AWTEmbeddedControl(Composite parent) { super(parent, SWT.NO_BACKGROUND | SWT.BORDER | SWT.EMBEDDED); Frame locationFrame = SWT_AWT.new_Frame(this); Panel panel = new Panel(new BorderLayout()) { private static final long serialVersionUID = 3447368094074143729L; public void update(java.awt.Graphics g) { /* Do not erase the background. Doesn't seem to be necessary to reduce flicker */ paint(g); } }; locationFrame.add(panel); JRootPane root = new JRootPane(); panel.add(root); Container contentPane = root.getContentPane(); RGB backgroundColor = getBackground().getRGB(); locationFrame.setBackground(new java.awt.Color(backgroundColor.red, backgroundColor.green, backgroundColor.blue)); locationFrame.setIgnoreRepaint(false); locationFrame.setVisible(true); //locationFrame.add(ad); <- flicker embeddee = createAWTComponent(); contentPane.add(embeddee); } abstract protected Component createAWTComponent(); }