我正在尝试使用Processing创建两个窗口。在您将其标记为重复项之前,还有其他与此类似的问题,我有一个特定的错误,我找不到解决方案。当我尝试add(s)时出现错误The method add(Component) in the type Container is not applicable for the arguments (evolution_simulator.SecondApplet)

我不确定如何解决此问题,我们将不胜感激。这是代码:

import javax.swing.*;

PFrame f;

void setup() {
    size(320, 240);
    f = new PFrame();
}

void draw() {

}

public class PFrame extends JFrame {

    SecondApplet s;

    public PFrame() {
        setBounds(100,100,400,300);
        s = new SecondApplet();
        add(s);  // error occurs here
        s.init();
        show();
    }
}

public class SecondApplet extends PApplet {

    public void setup() {
        size(400, 300);
        noLoop();
    }

    public void draw() {

    }
}

最佳答案

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

而是,为第二个窗口创建扩展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);
  }
}

10-06 08:55