2016-09-07 105 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這不是一個錯誤。這只是一個警告。你可以忽略它。 –