Von dem, was ich weiß, können Sie nicht Rectangle
s direkt auf einer Leinwand zeichnen - Rectangle
ist ein JavaFX-Knoten, aber die Canvas-API ist viel niedriger Ebene und nur sehr grundlegende Zeichenbefehle. Zum Beispiel für das Rechteck zeichnen, wäre es:
GraphicsContext gc = theCanvas.getGraphicsContext2D();
gc.fillRect(20,20,10,10);
Dies ist jedoch nicht, dass Sie das Rechteck manipulieren weiter nicht lassen. was ich tue, ist eine benutzerdefinierte Klasse DrawableRectangle
(zum Beispiel) erstellen mit einem Verfahren Unentschieden:
public class DrawableRectangle extends Rectangle {
Canvas theCanvas;
public DrawableRectangle(Rectangle r, Canvas c){
super(r.getX(),r.getY(),r.getWidth(),r.getHeight());
this.theCanvas = c;
}
public DrawableRectangle(int x, int y, int w, int h, Canvas c){
super(x,y,w,h);
this.theCanvas = c;
}
public void draw(){
GraphicsContext gc = theCanvas.getGraphicsContext2D();
gc.setFill(Paint.valueOf("black"));
gc.fillRect(getX(),getY(),getWidth(),getHeight());
}
}
die Sie dann wie folgt verwenden können:
GraphicsContext gc = theCanvas.getGraphicsContext2D();
DrawableRectangle rect = new DrawableRectangle(10,10,20,20, theCanvas);
// Draw it:
rect.draw();
// You can then manipulate it:
rect.setY(40);
rect.setHeight(60);
// You need to draw it again to see the changes:
// First clear the canvas:
gc.clearRect(0,0,theCanvas.getWidth(),theCanvas.getHeight());
// Then draw it:
rect.draw();
(ich kann nicht garantieren, dies ist die beste Methode, aber es funktioniert gut für mich.Wenn Sie verschiedene Formen auf diese Weise zeichnen möchten, sollten Sie eine Schnittstelle Drawable, um es zu abstrahieren.)
Machen Sie einen Schnappschuss und zeichnen Sie das resultierende Bild ... Oder einfach die Eigenschaften der verwenden Rechteck, um ein Rechteck auf der Leinwand zu zeichnen, das wie der Rechteckknoten aussieht, den Sie cr haben eated ... – fabian
Bitte überprüfen Sie Ihre Tags, da Sie mehrere Versionen von javafx getaggt haben. – Zimano
danke Fabian. Ich versuche den Rechteckknoten zum Zeichnen auf Leinwand zu verwenden. Aber dann kann ich dieses Rechteck nicht mit der Mausereignisaktion auf die Leinwand ziehen. Also dachte ich, dass das Rechteck auf der Leinwand dasselbe wie der Rechteckknoten sein muss. – mbcrb