【问题标题】:Creating a second applet(window) in processing在处理中创建第二个小程序(窗口)
【发布时间】:2013-05-19 00:09:57
【问题描述】:

大家好,我正在尝试编写代码,通过传递一个敏感区域,我可以创建第二个正在处理的小程序。

代码工作正常,除了 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 帧而不会更多。

你能帮帮我吗? 谢谢;)

【问题讨论】:

标签: java swing applet jframe processing


【解决方案1】:

您发布的代码无法编译,因为您没有声明顶级封装类,所以我很好奇您为什么说它有效。

关于您的问题,您在顶部声明了 PFrame f 字段,但在 mousePressed() 中声明了另一个字段。这个变量f 与第一个变量不同。为了解决您的问题,您可能希望您的代码如下所示:

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

这将允许您创建新框架,但只能创建一次。不过,我建议您选择更具描述性的变量名称。另外,它应该是SecondApplet,而不是secondApplet

【讨论】:

  • 我在这里调用类 PFrame f;第二个小程序;它非常有效。
  • 不,您要在那里声明这些变量。没有任何东西被实例化。不过,这也是有效的 Java 代码,因为没有将这些变量封装到的类。此外,您在 mousePressed() 中声明的变量 f 与您声明的第一个变量不同,即使它们具有相同的名称,因为它们具有不同的作用域。
【解决方案2】:
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();
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2012-07-14
    • 2011-11-29
    • 2018-01-09
    • 2015-07-28
    • 1970-01-01
    相关资源
    最近更新 更多