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?

¿Fue útil?

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 como FillLayout, GridLayout, etc, así que algo como shell.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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top