如何在SWT中添加Processing PApplet

时间:2009-09-27 09:58:15

标签: java swt processing

尝试在SWT中添加PApplet时遇到问题,当它应该呈现PApplet时,它会出现一个空窗口。即PApplet单独工作,但不在SWT窗口中工作。

我认为只需将PApplet添加到框架中,最初应该使用Eclipse中的SWT教程代码。显然它并不那么容易。这是我的代码,其中MyPApplet是自定义的PApplet

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();
}

我错过了什么吗?

4 个答案:

答案 0 :(得分:3)

我已经制作了关于如何在Eclipse中融合Processing与SWT的小指南: http://christian.liljedahl.dk/guides/processing-and-swt-in-eclipse

我希望这能为你解决。

我的“技巧”是有一个用于处理内容的窗口,以及一个带有UI的单独窗口。

答案 1 :(得分:2)

我认为你所缺少的是pApplet.init(); 请参阅课程文档:http://dev.processing.org/reference/core/javadoc/processing/core/PApplet.html

答案 2 :(得分:1)

我认为有另一种方法可以实现这一目标。 使用Swing组件作为适配器,它喜欢: 将PApplet添加到JComponent(如JInternalFrame)中,然后将此JComponent嵌入到SWT Composite中。

我已经做了一些练习,而且效果很好......

我也在博客上写了一些关于这个主题的摘要: http://blog.csdn.net/godoorsun/article/details/6747589

(顺便说一句,这篇文章是用中文写的:(也许你可以通过Google Translator阅读,但该文章的示例代码很容易理解)

答案 3 :(得分:0)

注意:这仅适用于处理2.2.1 1 而不适用​​于3+ 2

在OPs代码中,有两个缺失的语句:

  • 正如user176840所说,在打开shell之前需要调用pApplet.init()
  • 此外,要将Layout设置为FillLayoutGridLayout等shell,以便shell.setLayout(new FillLayout())

基本工作代码:

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 在我的情况下,我试图将一个applet嵌入到基于Maven的SWT项目中,所以我只能在{{{}中使用最后一个(也是唯一一个)可用于2.X系列的处理版本。 1}}:

pom.xml

2 处理3不兼容的原因可以是herehere,基本上是代码的重大重组。我试图将Processing canvas嵌入到SWT应用程序中失败。