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

此代码通过单击框架的任何区域来创建第二个小程序,但如果您继续单击它将创建同一小程序的更多框架。

我想要的是,一旦我点击它只会创建 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 回答