大家好,我正在尝试做一个代码,我可以通过传递一个合理的区域来创建第二个小程序。
代码工作正常,除了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();
}
}
此代码只需单击框架的任何区域即可创建第二个小程序,但如果您继续单击它将创建同一小程序的更多框架。
我想要的是,一旦我点击它只创建一帧而不再创建。
你可以帮帮我吗? 谢谢;)答案 0 :(得分:1)
您发布的代码无法编译,因为您没有声明顶级封装类,所以我很好奇为什么说它有效。
关于您的问题,您在顶部声明了字段PFrame f
,但在mousePressed()
中您声明了另一个字段。此变量f
与第一个变量不同。要解决您的问题,您可能希望代码看起来像:
void mousePressed() {
if (f == null) {
f = new PFrame();
}
}
这将允许您创建新帧,但只能创建一次。不过,我建议您选择更多描述性变量名称。此外,它应该是SecondApplet
,而不是secondApplet
。
答案 1 :(得分: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();
}
}