用FXGraphics2D(java.awt)替换java中的剪辑

用FXGraphics2D(java.awt)替换java中的剪辑,java,javafx,awt,javafx-8,Java,Javafx,Awt,Javafx 8,所以我用java开发了一个FXGraphics2D应用程序,在这个应用程序中,你可以看到一个被剪裁的形状,然后在背景中看到一个随机生成的彩色线条背景。这一切都很顺利,但我想添加一个功能,用鼠标移动剪辑形状 在这种情况下,将鼠标移到画布上单击或拖动的位置。您不必在形状上拖动以供参考 删除剪辑或只是清理画布似乎有一个问题。现在,正如您可能看到的FXGraphics2D一样,我是一个新手,但我自己在文档或互联网上的任何地方都找不到它 是否有人知道如何解决完全清除画布、从剪辑中独立出来或以某种方式替换剪

所以我用java开发了一个FXGraphics2D应用程序,在这个应用程序中,你可以看到一个被剪裁的形状,然后在背景中看到一个随机生成的彩色线条背景。这一切都很顺利,但我想添加一个功能,用鼠标移动剪辑形状

在这种情况下,将鼠标移到画布上单击或拖动的位置。您不必在形状上拖动以供参考

删除剪辑或只是清理画布似乎有一个问题。现在,正如您可能看到的FXGraphics2D一样,我是一个新手,但我自己在文档或互联网上的任何地方都找不到它

是否有人知道如何解决完全清除画布、从剪辑中独立出来或以某种方式替换剪辑的问题

提前谢谢

单击几下后的当前状态: 在我看来,FXGraphics2D将下一个剪辑放在旧剪辑的后面

到目前为止我掌握的代码

绘制

public void draw(FXGraphics2D图形){
graphics.setTransform(新仿射变换());
图形.背景(颜色.白色);
graphics.clearRect(0,0,(int)canvas.getWidth(),(int)canvas.getHeight();
图形。setPaint(颜色。黑色);
graphics.draw(clippingelipse.getShape());
graphics.clip(clippingelipse.getShape());
Set lineSet=Line.getLineSet(100019201080);
用于(线:线集){
graphics.setPaint(line.getColor());
graphics.drawLine(line.getX1(),line.getY1(),line.getX2(),line.getY2());
}
}
句柄(setOnMousePressed()和setOnMouseDrawed()的方法调用)

私有无效句柄(MouseEvent事件){
this.clippingelipse.setX((int)event.getX()-this.clippingelipse.getWidth()/2);
this.clippingelipse.setY((int)event.getY()-this.clippingelipse.getWidth()/2);
}
开始

this.clippingelipse=新的clippingelipse(1920/2-1001080/2-100200);
BorderPane mainPane=新建BorderPane();
画布=新的调整大小的画布(g->绘图(g),主窗格);
主窗格。设置中心(画布);
FXGraphics2D g2d=新的FXGraphics2D(canvas.getGraphicsContext2D());
新的AnimationTimer(){
long last=-1;
@凌驾
公共无效句柄(长){
如果(最后==-1)
最后=现在;
更新((现在-上次)/100000000.0);
最后=现在;
绘图(g2d);
}
}.start();
setOnMousePressed(事件->句柄(事件));
setonMouseDrawed(事件->句柄(事件));
舞台场景(新场景(主窗格));
stage.setFullScreen(真);
舞台剧名(“聚光灯”);
stage.show();
绘图(g2d);

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

graphics.clip(clippingelipse.getShape())
graphics.setClip(clippingelipse.getShape())

&

将其添加到draw()方法的末尾;
graphics.clip(空)

编辑: 还有一种可能性:
graphics.setClip(null)