如何在 java graphics2D 中旋转后删除原始对象?
How to remove original object after rotation in java graphics2D?
具体来说,我试图只显示旋转的对象。我绘制了一个矩形并旋转了它。
如何只显示旋转的矩形并处理掉旧的?
已编辑:
以下是旋转我的矩形的代码:
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)
使用 Graphics 对象自定义渲染形状,请确保使用 super.paintComponent(g)
作为清除绘图区域的第一行
从那里画出你的 Rectangle/rotated 矩形
如果不使用 super.paintComponent(g)
,您以前的绘图(未旋转的矩形)将保持可见
编辑
随着源代码的更新:您正在绘制新矩形和旧矩形,因为您的 if 语句没有 else 子句
尝试插入一个 else 子句,使其绘制一个或另一个矩形,目前它可能先绘制一个旋转的矩形,然后再绘制未旋转的矩形
if(rotateClicked)
{
rotateRectangle(g2d,rect,squareColor);
rotateClicked = false;
}
else
drawRectangle(g2d, rect, squareColor);
您可能需要也可能不需要 rotateClicked = true
在 else 中,因此它会在旋转和未旋转之间来回翻转
具体来说,我试图只显示旋转的对象。我绘制了一个矩形并旋转了它。
如何只显示旋转的矩形并处理掉旧的?
已编辑:
以下是旋转我的矩形的代码:
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)
使用 Graphics 对象自定义渲染形状,请确保使用 super.paintComponent(g)
作为清除绘图区域的第一行
从那里画出你的 Rectangle/rotated 矩形
如果不使用 super.paintComponent(g)
,您以前的绘图(未旋转的矩形)将保持可见
编辑
随着源代码的更新:您正在绘制新矩形和旧矩形,因为您的 if 语句没有 else 子句
尝试插入一个 else 子句,使其绘制一个或另一个矩形,目前它可能先绘制一个旋转的矩形,然后再绘制未旋转的矩形
if(rotateClicked)
{
rotateRectangle(g2d,rect,squareColor);
rotateClicked = false;
}
else
drawRectangle(g2d, rect, squareColor);
您可能需要也可能不需要 rotateClicked = true
在 else 中,因此它会在旋转和未旋转之间来回翻转