【问题标题】:How to add a Processing PApplet in SWT如何在 SWT 中添加处理 PApplet
【发布时间】:2009-09-27 09:58:14
【问题描述】:

我在尝试将 PApplet 添加到 SWT 时遇到问题,当它应该只呈现 PApplet 时,它会打开一个空窗口。 IE。 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();
}

我错过了什么吗?

【问题讨论】:

  • 叫我白痴……什么是 PApplet?
  • @arcticpenguin:PApplet 是 processing.org 用作窗口/小程序框架的类。它继承了 java 的 Applet 类。
  • @Spoike 你有没有找到解决方案?

标签: java swt processing


【解决方案1】:

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

我希望这可以为您解决问题。

我的“诀窍”是为处理内容设置一个窗口,并在其自己的线程中设置一个带有 UI 的单独窗口。

【讨论】:

    【解决方案2】:

    我认为你所缺少的只是 pApplet.init(); 查看该类的文档:http://dev.processing.org/reference/core/javadoc/processing/core/PApplet.html

    【讨论】:

      【解决方案3】:

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

      我在这方面做了一些练习,效果很好..

      我还写了一些关于这个主题的总结: http://blog.csdn.net/godoorsun/article/details/6747589

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

      【讨论】:

        【解决方案4】:

        注意:这仅适用于处理 2.2.11 而不适用于 3+2

        在 OPs 代码中,缺少两个语句:

        • user176840所说,开壳前需要调用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 在我的例子中,我试图将一个小程序嵌入到基于 Maven 的 SWT 项目中,所以我只能使用 @987654332 中适用于 2.X 系列的最后一个(也是唯一一个)处理版本@:

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

        2 Processing 3不兼容的原因可以查到herehere,基本上是对代码进行了重大的重构。我尝试将处理画布嵌入到 SWT 应用程序中,但没有成功。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-08-04
          • 2022-10-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-01
          相关资源
          最近更新 更多