2016-09-07 37 views
0

如何在不退出整个应用程序的情况下关闭新框架? 通过点击X按钮,最简单的方法是什么。 在此先感谢。关闭额外窗口(PApplet)

ControlFrame cf; 
void setup() 
{ 
cf = new ControlFrame(this,500,500, "cf name"); 
} 

class ControlFrame extends PApplet 
{ 
    int w,h; 
    PApplet parent; 

    public ControlFrame(PApplet _parent, int _w, int _h, String _name) 
    { 
    super(); 
    parent=_parent; w=_w; h=_h; 
    PApplet.runSketch(new String[]{this.getClass().getName()},this); 
    } 
    public void settings() 
    { size(w,h); } 
} 

回答

0

注意:您的问题与ControlP5没有任何关系。

第1步:获取对本地窗口的引用。你如何做到这一点取决于你使用的渲染器。如果您使用的是默认的渲染器,它看起来像这样:

Frame frame = ((SmoothCanvas) ((PSurfaceAWT)surface).getNative()).getFrame(); 

第2步:你可以调用dispose()Frame来隐藏它不quititng整个应用程序。

frame.dispose(); 

全部放在一起,它看起来像这样:

import java.awt.Frame; 
import processing.awt.PSurfaceAWT; 
import processing.awt.PSurfaceAWT.SmoothCanvas; 

ControlFrame cf; 
void setup() 
{ 
    cf = new ControlFrame(this, 500, 500, "cf name"); 
} 

class ControlFrame extends PApplet 
{ 
    int w, h; 
    PApplet parent; 

    public ControlFrame(PApplet _parent, int _w, int _h, String _name) 
    { 
    super(); 
    parent=_parent; 
    w=_w; 
    h=_h; 
    PApplet.runSketch(new String[]{this.getClass().getName()}, this); 

    } 
    public void settings() 
    { 
    size(w, h); 
    } 

    public void draw(){ 
    //needed for mousePressed 
    println(millis()); 
    } 

    public void mousePressed(){ 
    Frame frame = ((SmoothCanvas) ((PSurfaceAWT)surface).getNative()).getFrame(); 
    frame.dispose(); 
    } 

} 

步骤3:注意你的第二个草图将继续运行,那么你可能还需要调用noLoop(),以防止不必要的计算。

+0

感谢您的快速回复。我编辑标志是因为问题与ContolP5无关。我使用这个窗口作为我的程序的controlP5 UI,所以它不会与noLoop()一起工作。 我有“找不到processing.awt.PSurfaceAWT库”错误,这很奇怪,因为你的解决方案工作得很好。 –

+0

@MaciejWójcik这不是一个错误。这只是一个警告。你可以忽略它。 –