我有一个项目叫做可视化数据结构。我做这个项目已经快一个星期了,但我偶然发现了这个问题。
我在一次Graphics paint()方法调用中进行了大量的身份转换。
预期输出: DSNode draw()方法应在标识转换后调用。输出:看起来身份转换不起作用。
下面是我的代码:这个方法在一个名为viewPanel的类中。
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
AffineTransform saveTransform = g2d.getTransform();
final AffineTransform identity = new AffineTransform();
g2d.setTransform(identity);
g2d.clearRect(0, 0, this.WIDTH, this.HEIGHT);
g2d.drawString(refVar, refVarX, refVarY);
g2d.drawLine(arrowOfRefVarX, arrowOfRefVarY, arrowOfRefVarX+arrowOfRefVarLength, arrowOfRefVarY);
g2d.drawLine(arrowOfRefVarX+arrowOfRefVarLength,arrowOfRefVarY,arrowOfRefVarX+arrowOfRefVarLength-5,arrowOfRefVarY-5);
g2d.drawLine(arrowOfRefVarX+arrowOfRefVarLength,arrowOfRefVarY,arrowOfRefVarX+arrowOfRefVarLength-5,arrowOfRefVarY+5);
DSNode temp = dsNode;
while(temp!=null)
{
g2d.setTransform(identity);
temp.draw(g2d);
temp = temp.next();
}
g2d.setTransform(saveTransform);
}此方法位于另一个名为DSNode的类中:
public void draw(Graphics2D g2d)
{
AffineTransform transform = g2d.getTransform();
transform.translate(x,y);
g2d.transform(transform);
g2d.draw(rectangle);
g2d.draw(rectanglePtrBox);
g2d.drawLine(arrowX,arrowY,arrowX+arrowLength,arrowY);
g2d.drawLine(arrowX+arrowLength,arrowY,arrowX+arrowLength-5,arrowY-5);
g2d.drawLine(arrowX+arrowLength,arrowY,arrowX+arrowLength-5,arrowY+5);
g2d.drawString(val,valX,valY);
}`发布于 2015-03-14 19:44:06
看起来身份转换不起作用。生成的对象是像根本没有使用转换一样绘制的,还是在错误的位置绘制的?
因为在第二种情况下,原因可能是transform.translate(x,y);似乎更改了transform,而不是创建新的转换,因此如果您绘制多个对象,转换将一个接一个地链接。
因此,对于5,5和10,10的对象,它们将绘制在5,5和15,15。这只是一个猜测。
https://stackoverflow.com/questions/29048347
复制相似问题