如何在Processing中创建单个草图的多个窗口?

时间:2015-09-26 15:07:56

标签: java applet processing frame multi-window

我想在Processing中只使用一个草图来创建两个窗口。

我想要做的是,如果我在一个窗口中单击一个按钮,则会在另一个窗口中显示一些图像。

我搜索过谷歌并找到了一些例子。实际上,我在这个'堆栈溢出网'中发现了同样的问题。这是链接。

Create more than one window of a single sketch in Processing http://forum.processing.org/one/topic/multiple-windows-2-4-2011.html

以下是第二个链接的代码。

import java.awt.Frame;
PFrame f;
secondApplet s;
//f = new PFrame();
void setup() {
 size(320, 240);
 f = new PFrame();
}

void draw() {
  background(255,0,0);
   fill(255);
   rect(10,10,frameCount%0,10);
   s.background(0, 0, 255);
   s.fill(100);
   s.rect(10,20,frameCount%0,10);
   s.redraw();
}

public class PFrame extends Frame{
    public PFrame() {
        setBounds(100,100,400,300);
        s = new secondApplet();
        add(s);
        s.init();
        show();
    }
}

public class secondApplet extends PApplet {
    public void setup() {
        size(400, 300);
        noLoop();
    }

    public void draw() {
    }
} 

但是当我运行此代码时,我在 add(s) ;得到以下错误消息。

Container类型中的方法add(Component)不适用于参数(multi_window_test.secondApplet)

第一个链接的第一个注释代码类似,但是当我运行此代码时,我收到相同的错误消息。

我发现的其他示例代码都很相似。它们都创建了扩展PApplet的PFrame类和secondApplet。他们说这些代码运行良好,但我无法运行这些代码。

我找不到错误消息的原因。除了我之外,运行此示例代码时,其他人似乎没有问题。 如果有人知道解决方案,请帮助我。

另外,如果还有一种简单的方法可以在一个草图中创建多窗口,请告诉我。

1 个答案:

答案 0 :(得分:4)

错误消息的原因非常明显:add()函数期待ComponentPApplet不是Component。这是因为PApplet从处理3开始不再延伸Applet,因此将其用作Component的旧代码将不再有效。

相反,请考虑我对this question的回答。基本上,只需为第二个窗口创建一个扩展PApplet的类,然后使用第二个PApplet.runSketch()作为参数调用PApplet

void setup() {
  size(100, 100);

  String[] args = {"TwoFrameTest"};
  SecondApplet sa = new SecondApplet();
  PApplet.runSketch(args, sa);
}

void draw() {
  background(0);
  ellipse(50, 50, 10, 10);
}     

public class SecondApplet extends PApplet {

  public void settings() {
    size(200, 100);
  }
  public void draw() {
    background(255);
    fill(0);
    ellipse(100, 50, 10, 10);
  }
}