Como adicionar um PApplet processamento em SWT
-
18-09-2019 - |
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?
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 comoFillLayout
,GridLayout
, etc, então algo comoshell.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.