P: ¿Puedo utilizar el control de diagramación Java en una aplicación SWT (Standard Widget Toolkit)?
R: JDiagram es un componente Swing, y puede ser embebido en la aplicación SWT usando la librería Puente SWT/AWT. Un programa mínimo SWT que crea y muestra un DiagramView desplazable se muestra a continuación.
import java.awt.Frame; import java.awt.Panel; import javax.swing.JScrollPane; import org.eclipse.swt.SWT; import org.eclipse.swt.awt.SWT_AWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import com.mindfusion.diagramming.DiagramView; public class SwtApp { public static void main(String[] args) { // create SWT main window Display display = new Display (); Shell shell = new Shell(display); shell.setLayout(new FillLayout()); Composite composite = new Composite(shell, SWT.EMBEDDED | SWT.NO_BACKGROUND); // add a Swing frame to the SWT composite control Frame frame = SWT_AWT.new_Frame(composite); Panel panel = new Panel(new java.awt.BorderLayout()); frame.add(panel); // add a DiagramView to the Swing frame DiagramView flowchart = new DiagramView(); JScrollPane scrollPane = new JScrollPane(flowchart); panel.add(scrollPane); // run the SWT event loop shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose (); } }
Tenga en cuenta que Swing y SWT procesan eventos en diferentes hilos. Por lo tanto, si usted necesita actualizar la interfaz de usuario SWT en respuesta a un evento del diagrama, usted debe correr el procesamiento de código SWT usando los métodos Display.asyncExec o Display.syncExec. Si usted necesita actualizar el diagrama en respuesta a un evento SWT, corra el código de procesamiento de diagrama usando los métodos SwingUtilities.invokeLater o SwingUtilities.invokeAndWait. Vea tópico de Integración Swing/SWT en eclipse.org para mayor información acerca de sincronización de hilos y consejos adicionales para conectar SWT/AWT.