2

Processing で 1 つのスケッチだけを使用して 2 つのウィンドウを作成したいと考えています。

私がやろうとしているのは、あるウィンドウでボタンをクリックすると、別のウィンドウに画像が表示されるということです。

Google で検索したところ、いくつかの例が見つかりました。実は、この「スタック オーバーフロー ウェブ」で同じ質問を見つけました。ここにリンクがあります。

Processing http://forum.processing.org/one/topic/multiple-windows-2-4-2011.htmlで単一のスケッチの複数のウィンドウを作成する

これが2番目のリンクのコードです。

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 を作成します。彼らは、これらのコードはうまく機能すると言いましたが、これらのコードを実行できません。

エラー メッセージの理由がわかりませんでした。私以外の人は、このサンプル コードを実行しても問題ないようです。誰かが解決策を知っているなら、私を助けてください。

また、1 つのスケッチで複数のウィンドウを簡単に作成する方法が他にあれば教えてください。

4

1 に答える 1

4

エラー メッセージの理由は一目瞭然です。add()関数は を期待していますがComponent、 でPAppletはありませんComponent。これは、Processing 3 の時点でPApplet拡張が行われなくなったためApplet、これを として使用する古いコードが機能しComponentなくなるためです。

代わりに、この質問に対する私の答えを検討してください。基本的に、2 番目のウィンドウ用に拡張するクラスを作成し、その 2 番目をパラメーターとして使用して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);
  }
}
于 2015-09-26T15:24:22.133 に答える