Pergunta

Eu tenho um problema ao tentar adicionar um PApplet em SWT, ele vira para cima uma janela vazia quando ele deve apenas tornar o PApplet. Ou seja, o PApplet funciona por si só, mas não em uma janela SWT.

Eu pensei que apenas adicionando o PApplet para o quadro deve inicialmente fazer o truque, usando o código de SWT tutorial em Eclipse. Aparentemente, ele não era tão fácil. Aqui está o meu código, onde MyPApplet é um 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();
}

Estou faltando alguma coisa?

Foi útil?

Solução

Eu fiz este pequeno guia sobre como fundir Processamento com SWT no Eclipse: http://christian.liljedahl.dk/guides/processing-and-swt -in-eclipse

Espero que isso resolve-lo para você.

O meu "truque" é ter uma janela para o material de processamento, e uma janela separada com a interface do usuário em seu próprio segmento.

Outras dicas

Eu acho que tudo o que está faltando é pApplet.init (); consulte a documentação para a classe: http: //dev.processing org / referência / núcleo / javadoc / processamento / núcleo / PApplet.html

Eu acho que há uma maneira alternativa para conseguir isso. Usando um balanço Componente como um adaptador, que gosta: adicione o PApplet em um JComponent como JInternalFrame, então incorporar este JComponent para o SWT Composite.

Eu fiz algumas práticas sobre isso, e ele funciona muito bem ..

e eu também tenho um blog alguns resumo sobre este tema: http://blog.csdn.net/godoorsun/article/details/6747589

(aliás, este artigo é escrito em chinês :(, talvez você possa lê-lo através do Google Translator, mas o código de exemplo em que o artigo é fácil de entender)

Nota: Isso só funciona com processamento 2.2.1 1 e não com 3+ 2

No código PO, existem duas declarações que faltam:

  • user176840 disse, é necessário que a chamada para pApplet.init() antes de abrir o shell
  • Além disso, para definir um Layout para o shell como FillLayout, GridLayout, etc, então algo como shell.setLayout(new FillLayout())

código de trabalho 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 No meu caso, eu estava tentando incorporar um applet em projeto SWT baseado Maven, então eu só posso usar a última (e única) versão de processamento disponível para 2.X série em pom.xml:

    <dependency>
        <groupId>org.processing</groupId>
        <artifactId>core</artifactId>
        <version>2.2.1</version>
    </dependency>

2 A razão pela qual Processamento 3 não é compatível pode ser encontrada aqui e aqui , basicamente, uma grande reestruturação do código. Tentei incorporar a tela de processamento para a aplicação SWT sem sucesso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top