将 java 中的剪辑替换为 FXGraphics2D (Java.awt)

Replacing clip in java with FXGraphics2D (Java.awt)

所以我正在使用 java 的 FXGraphics2D 应用程序,其中您有一个形状被剪裁,并且您会在背景中看到随机生成的彩色线条背景。一切顺利,但后来我想添加用鼠标移动剪辑形状的功能。

在本例中为鼠标点击 canvas 或拖动的位置。您不必在形状上拖动 FYI。

删除剪辑或仅清除 canvas 似乎有一个问题。现在因为我对 FXGraphics2D 很陌生,但我自己无法在文档或互联网上的任何地方找到它。

有谁知道如何解决从剪辑中独立清除 canvas 或以某种方式替换剪辑的问题?

提前致谢!

点击后的当前状态: https://i.stack.imgur.com/dPbqI.png 在我看来,FXGraphics2D 将下一个剪辑放在旧剪辑之后。

我目前的代码;

绘制

public void draw(FXGraphics2D graphics) {
        graphics.setTransform(new AffineTransform());
        graphics.setBackground(Color.white);
        graphics.clearRect(0, 0, (int)canvas.getWidth(), (int)canvas.getHeight());

        graphics.setPaint(Color.black);
        graphics.draw(clippingEllipse.getShape());
        graphics.clip(clippingEllipse.getShape());

        Set<Line> lineSet = Line.getLineSet(1000,1920,1080);
        for (Line line : lineSet){
            graphics.setPaint(line.getColor());
            graphics.drawLine(line.getX1(), line.getY1(), line.getX2(), line.getY2());
        }
    }

Handle(调用 setOnMousePressed() 和 setOnMouseDragged() 的方法)

private void handle(MouseEvent event) {
        this.clippingEllipse.setX((int) event.getX() - this.clippingEllipse.getWidth() / 2);
        this.clippingEllipse.setY((int) event.getY() - this.clippingEllipse.getWidth() / 2);
    }

开始

        this.clippingEllipse = new ClippingEllipse(1920/2-100, 1080/2-100, 200);

        BorderPane mainPane = new BorderPane();
        canvas = new ResizableCanvas(g -> draw(g), mainPane);
        mainPane.setCenter(canvas);
        FXGraphics2D g2d = new FXGraphics2D(canvas.getGraphicsContext2D());

        new AnimationTimer() {
            long last = -1;
            @Override
            public void handle(long now) {
        if(last == -1)
                    last = now;
        update((now - last) / 1000000000.0);
        last = now;
        draw(g2d);
            }
        }.start();

        canvas.setOnMousePressed(event -> handle(event));

        canvas.setOnMouseDragged(event -> handle(event));

        stage.setScene(new Scene(mainPane));
        stage.setFullScreen(true);
        stage.setTitle("Spotlight");
        stage.show();
        draw(g2d);

我为感兴趣的人找到的解决方案;

graphics.clip(clippingEllipse.getShape());graphics.setClip(clippingEllipse.getShape());

&

在draw()方法的末尾添加这个; graphics.clip(null);

编辑: 也有可能:graphics.setClip(null);