2016-09-07 3 views
0

Wie wird ein neuer Frame geschlossen, ohne die gesamte Anwendung zu beenden? Was ist der einfachste Weg, um es zu tun, indem Sie auf X klicken. Vielen Dank im Voraus.Zusätzliches Fenster schließen (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); } 
} 

Antwort

0

Hinweis: Ihre Frage hat mit ControlP5 nicht wirklich etwas zu tun.

Schritt 1: Erhalten Sie einen Verweis auf das native Fenster. Wie Sie dies tun, hängt vom verwendeten Renderer ab. Wenn Sie den Standard-Renderer verwenden, sieht es wie folgt aus:

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

Schritt 2: Sie können dann dispose() rufen an diesem Frame es zu verbergen, ohne die gesamte Anwendung quititng.

frame.dispose(); 

setzen sie alle zusammen, es sieht wie folgt aus:

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

} 

Schritt 3: Beachten Sie, dass Ihre zweite Skizze läuft weiter, so dass Sie auch noLoop() anrufen möchten unnötige Berechnung zu verhindern .

+0

Danke für die schnelle Antwort. Ich habe Flags bearbeitet, weil Fragen nichts mit ContolP5 zu tun haben. Ich verwende dieses Fenster als controlP5 UI für mein Programm, so dass es nicht mit noLoop() funktioniert. Ich habe "Keine Bibliothek für processing.awt.PSurfaceAWT" Fehler gefunden, die seltsam ist, weil Ihre Lösung sehr gut funktioniert. –

+0

@ MaciejWójcik Das ist kein Fehler. Es ist nur eine Warnung. Du kannst es ignorieren. –

Verwandte Themen