在处理中创建第二个小程序(窗口)

时间:2013-05-19 00:09:57

标签: java swing applet jframe processing

大家好,我正在尝试做一个代码,我可以通过传递一个合理的区域来创建第二个小程序。

代码工作正常,除了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 个答案:

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