2

こんにちは皆さん、適切な領域を渡すことで、処理中に 2 番目のアプレットを作成できるコードを実行しようとしています。

コードは1つのことを除いて正常に動作します。

感知領域を通過すると、ループ内に同じフレームが作成されます。

これがコードです。

import javax.swing.JFrame;

PFrame f;
secondApplet s;

void setup() {
  size(600, 340);

}

void draw() {
  background(255, 0, 0);
  fill(255);
}     

void mousePressed(){

  PFrame f = new PFrame();
}


public class secondApplet extends PApplet {

  public void setup() {
    size(600, 900);
     noLoop();
  }
  public void draw() {
    fill(0);
    ellipse(400, 60, 20, 20);
  }
}

public class PFrame extends JFrame {
  public PFrame() {

    setBounds(0, 0, 600, 340);
    s = new secondApplet();
    add(s);
    s.init();
    println("birh");
    show();
  }
}

このコードは、フレームの任意の領域をクリックするだけで 2 番目のアプレットを作成しますが、クリックし続けると、同じアプレットのフレームがさらに作成されます。

私が欲しいのは、クリックすると1フレームだけ作成され、それ以上作成されないことです。

私を助けてくれませんか?ありがとう ;)

4

2 に答える 2

1

トップレベルのカプセル化クラスが宣言されていないため、投稿したコードはコンパイルされません。なぜそれが機能すると言うのか知りたいです。

あなたの問題に関してPFrame fは、上部にフィールドが宣言されていますが、mousePressed()別のフィールドを宣言しています。この変数fは最初の変数とは異なります。問題を解決するには、おそらくコードを次のようにする必要があります。

void mousePressed() {
  if (f == null) {
    f = new PFrame();
  }
}

これにより、新しいフレームを作成できますが、一度だけです。ただし、よりわかりやすい変数名を選択することをお勧めします。SecondAppletまた、 ではなくである必要がありsecondAppletます。

于 2013-05-19T00:30:47.203 に答える
1
import javax.swing.JFrame;

PFrame f = null;
secondApplet s;

void setup() {
  size(600, 340);

}

void draw() {
  background(255, 0, 0);
  fill(255);
}     

void mousePressed(){

  if(f==null)f = new PFrame();
}


public class secondApplet extends PApplet {

  public void setup() {
    size(600, 900);
     noLoop();
  }
  public void draw() {
    fill(0);
    ellipse(400, 60, 20, 20);
  }
  /*
   * TODO: something like on Close set f to null, this is important if you need to 
   * open more secondapplet when click on button, and none secondapplet is open.
   */
}

public class PFrame extends JFrame {
  public PFrame() {

    setBounds(0, 0, 600, 340);
    s = new secondApplet();
    add(s);
    s.init();
    println("birh");
    show();
  }
}
于 2013-05-19T00:31:05.877 に答える