在Javafx中使用Canvas绘制DrawCircle(GraphicsContext gc)

DSa*_*hes 4 javafx javafx-8

我必须做一些projet在JavaFX中用Canvas绘制正多边形,我怀疑如何使用GraphicsContext设计一个带有canvas的圆

我有这个包含两个轴(x,y)的点类

public class Point2D {

         private float mX;
         private float mY;

         public Point2D () {
            this (0,0);
         }

         public Point2D (float x, float y) {
             mX = x;
             mY = y;
         }

        public float getX() {
           return mX;
          }

       public float getY() {
          return mY;
  }
}
Run Code Online (Sandbox Code Playgroud)

我有这个圆圈类,我怀疑使方法public void drawCircle(GraphicsContext gc)

public class Circle{

    private Point2D mCenter;
    private Color color;
    private float mRadius;

public Circle (Point2D center, Color color, float radius ) {
         this.mCenter = center;
         this.color = color;
         this.mRadius = radius;
     }

public void drawCircle(GraphicsContext gc) { // My Doubt is here
        Canvas canvas = new Canvas();
        gc = canvas .getGraphicsContext2D();
        gc.setFill(Color.WHITE);
        gc.setStroke(Color.BLACK);

    } 
}
Run Code Online (Sandbox Code Playgroud)

在主JavaFX中

public class PaintGeometricoFX extends Application {

private BorderPane root;

 @Override
    public void start(Stage primaryStage) {

         Point2D p = new Point2D(0, 0);
         Float radius = 4.0f;

         Circle circle = new Circle(p.getX(), p.getY(),Color.BLACK,radius)

         Canvas canvas = new Canvas();
         GraphicsContext gc = imagem.getGraphicsContext2D();

         circle.drawCircle(gc);

          root.setCenter(canvas);


        Scene scene = new Scene(root, 1152, 800);

        primaryStage.setTitle("PAINT");
        primaryStage.setResizable(false);
        primaryStage.setScene(scene);
        primaryStage.show();

    }

    public static void main(String[] args) {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ric*_*ver 8

抚摸:

getGraphicsContext2D().strokeOval(center.x-radius, center.y-radius, radius * 2, radius * 2);

填充:

getGraphicsContext2D().fillOval(center.x-radius, center.y-radius, radius * 2, radius * 2);

注意第三个和第四个参数是直径而不是半径。我在 ScalaFx 和正确的 ScalaJs 输出之间存在差异。但我检查了 JavaFx 文档,它的工作原理是一样的:

fillOval

public void fillOval(double x,
                     double y,
                     double w,
                     double h)

Fills an oval using the current fill paint.

This method will be affected by any of the global common or fill attributes as specified in the Rendering Attributes Table.

Parameters:
    x - the X coordinate of the upper left bound of the oval.
    y - the Y coordinate of the upper left bound of the oval.
    w - the width at the center of the oval.
    h - the height at the center of the oval. 
Run Code Online (Sandbox Code Playgroud)