【问题标题】:How to create more than one window of a single sketch in Processing?如何在处理中创建单个草图的多个窗口?
【发布时间】:2015-12-24 06:08:18
【问题描述】:

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

我想要做的是,如果我在一个窗口中单击一个按钮,那么一些图像会出现在另一个窗口中。

我搜索了 Google 并找到了一些示例。实际上,我在这个“堆栈溢出网络”中发现了同样的问题。这是链接。

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)

第一个链接的第一条评论的代码是相似的,但是当我运行这个代码时,我得到了同样的错误信息。

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

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

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

【问题讨论】:

标签: java applet processing frame multi-window


【解决方案1】:

错误消息的原因不言自明:add() 函数需要 Component,而 PApplet 不是 Component。这是因为 PApplet 从处理 3 开始不再扩展 Applet,因此将其用作 Component 的旧代码将不再有效。

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

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

【讨论】:

  • 我可以再问一个问题吗?实际上,我有两台显示器,我想在每台显示器上显示两个窗口。我想在第二台显示器上将第二个窗口显示为全屏。你能告诉我我该怎么做吗?
  • @Jinha.Kim 这有点牵扯,但基本上你需要使用 Java 的 GraphicsEnvironment 类。谷歌是你的朋友,我谈到了它here。尝试一下,如果遇到困难,我建议发布另一个单独的问题。
  • 我刚刚找到了解决方案。 Processing 3.0 中有一个简单的命令。如果我使用 fullScreen(2) 而不是 size(400,400),则窗口在第二个监视器中显示为 fullScreen。链接在这里。 processing.org/reference/fullScreen_.html
  • 另外,如果我在第一个窗口中单击鼠标按钮,我想关闭第二个窗口。现在,由于您的帮助,我可以打开两个窗口,但我也可以在需要时关闭第二个窗口。你能告诉我我该怎么做吗?
  • @Jinha.Kim 在新问题中发布您尝试过的内容(以 MCVE 的示例形式,就像我在回答中发布的那样),我们将从那里开始。跨度>
猜你喜欢
  • 1970-01-01
  • 2014-01-10
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多