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.