Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java graphics2D中删除旋转后的原始对象?_Java_Swing_Graphics2d - Fatal编程技术网

如何在java graphics2D中删除旋转后的原始对象?

如何在java graphics2D中删除旋转后的原始对象?,java,swing,graphics2d,Java,Swing,Graphics2d,具体来说,我尝试只显示旋转的对象。我画了一个矩形,然后旋转它 如何仅显示旋转的矩形并处理旧矩形 编辑: 以下是旋转我的矩形的代码: private void rotateRectangle(Graphics g, Rectangle rect, Color c){ Graphics2D g2d = (Graphics2D) g.create(); x = rect.x; y = rect.y;

具体来说,我尝试只显示旋转的对象。我画了一个矩形,然后旋转它

如何仅显示旋转的矩形并处理旧矩形

编辑:

以下是旋转我的矩形的代码:

    private void rotateRectangle(Graphics g, Rectangle rect, Color c){
            Graphics2D g2d = (Graphics2D) g.create();
            x = rect.x;
            y = rect.y;
            g2d.setColor(c);
            g2d.rotate(Math.PI/6, PANEL_WIDTH/2,PANEL_HEIGHT/2);
            g2d.drawRect(PANEL_WIDTH/2-x/2, PANEL_HEIGHT/2-y/2, x, y);
        }
这就是我称之为的paintComponent:

    @Override
    public void paintComponent(Graphics g) {        
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.setStroke(new BasicStroke(3));

            //these are declared before 
            rect.x = x;
            rect.y = y;

            if(rotateClicked){
                rotateRectangle(g2d,rect,squareColor);
                rotateClicked = false;
            }
            drawRectangle(g2d, rect, squareColor);
            getArea(x,y);
    }

如果通过覆盖
paintComponent(Graphics g)
使用图形对象自定义渲染形状,请确保使用
super.paintComponent(g)
作为清除绘图区域的第一行

从那里画出你的矩形/旋转的矩形

如果不使用
super.paintComponent(g)
,以前的图形(未旋转的矩形)将保持可见

编辑 随着源代码的更新:您正在绘制新矩形和旧矩形,因为if语句没有else子句

尝试插入一个else子句,以便它将绘制一个或另一个矩形,当前它可能绘制一个旋转的矩形,然后绘制未旋转的矩形

if(rotateClicked)
{
    rotateRectangle(g2d,rect,squareColor);
    rotateClicked = false;
}
else
    drawRectangle(g2d, rect, squareColor);

您可能需要或不需要else中的
rotateClicked=true
,因此它将在旋转和未旋转之间来回翻转

请共享用于绘制和旋转对象的代码。如果你希望社区能尽力回答你的问题,你需要在问题上下功夫。仔细看看,了解更多关于绘画在社区中如何运作的细节Swing@Zolt我认为这会有一个快速的解决方案,这就是为什么我没有提供代码,不管怎么说,我现在正在编辑这篇文章,以包括我到目前为止听到的所有内容,听起来像是画画本身的问题,结果可能是你的if语句有问题你好,谢谢你的回答。为了更具体,我加入了源代码。我确实使用了超类的构造函数,但我真不敢相信我错过了。非常感谢。但我有一个后续问题,如果我想扩大旋转图像的大小,该怎么办?我该怎么办?我是否应该记录未旋转的矩形尺寸,展开然后再次旋转?或者还有什么我想考虑的吗?它可能是最容易的提供旋转矩形与一个更大的矩形,因为那样你就可以控制每转基础,你希望更大,我想用JButt控制扩展。因此,在显示旋转后,如果用户单击展开,我想展开旋转的矩形。可以肯定的是,你是说我需要在rotateRectangle函数中放一个if语句,然后从那里开始?