Cómo añadir un PApplet Procesamiento en SWT
-
18-09-2019 - |
Pregunta
Tengo un problema cuando se trata de añadir un PApplet
en SWT, resulta una ventana de vacío cuando sólo debería hacer que el PApplet
. Es decir. la PApplet
funciona por sí mismo, pero no en una ventana SWT.
pensé que acaba de añadir el PApplet
en el marco debe hacer inicialmente el truco, utilizando el código de SWT tutorial en Eclipse. Al parecer no era tan fácil. Aquí está mi código, donde MyPApplet
es un PApplet
personalizado:
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
Composite composite = new Composite(shell, SWT.EMBEDDED | SWT.NO_BACKGROUND);
Frame frame = SWT_AWT.new_Frame(composite);
PApplet pApplet = new MyPApplet();
frame.add(pApplet);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
Me estoy perdiendo algo?
Solución
He hecho esta pequeña guía sobre cómo fusionar Procesamiento con SWT en Eclipse: http://christian.liljedahl.dk/guides/processing-and-swt -in-Eclipse
Espero que esto lo resuelve para usted.
Mi "truco" es tener una ventana para la materia de procesamiento, y una ventana separada con la interfaz de usuario en su propio hilo.
Otros consejos
Creo que todos los que se está perdiendo es pApplet.init (); consulte la documentación de la clase: http: //dev.processing .org / referencia / core / javadoc / procesamiento / core / PApplet.html
Creo que hay una forma alternativa para lograrlo. El uso de un componente Swing como un adaptador, que le gusta: añadir el PApplet en un JComponent como JInternalFrame, a continuación, insertar este JComponent en el SWT compuesto.
He hecho algunas prácticas sobre eso, y funciona bien ..
y también me he blogged algún resumen sobre este tema: http://blog.csdn.net/godoorsun/article/details/6747589
(por cierto, este artículo está escrito en chino :(, tal vez se puede leer a través de Google Traductor, pero el código de ejemplo en este artículo es fácil de entender)
Nota: Esto sólo funciona con el procesamiento 2.2.1
1 y no con 3+
2
En el código OP, hay dos declaraciones que faltan:
- Como se ha dicho user176840 , es necesario llamar a
pApplet.init()
antes de abrir la carcasa - También, para establecer un
Layout
a la cáscara comoFillLayout
,GridLayout
, etc, así que algo comoshell.setLayout(new FillLayout())
código de trabajo básica:
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Composite composite = new Composite(shell, SWT.EMBEDDED | SWT.NO_BACKGROUND);
Frame frame = SWT_AWT.new_Frame(composite);
PApplet pApplet = new MyPApplet();
frame.add(pApplet);
pApplet.init();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
1 En mi caso, yo estaba tratando de incrustar un applet en el proyecto SWT basada Maven, lo que sólo puede utilizar la última (y única) Procesamiento versión disponible para la serie 2.X en pom.xml
:
<dependency>
<groupId>org.processing</groupId>
<artifactId>core</artifactId>
<version>2.2.1</version>
</dependency>
2 La razón por la cual Procesamiento 3 no es compatible se puede encontrar aquí y aquí , básicamente, una reestructuración importante del código. Traté de integrar el lienzo de procesamiento en la aplicación SWT sin éxito.