Java仿射变换量表()

时间:2013-10-20 16:28:03

标签: java swing scale affinetransform

我正在开发一个项目,我正在使用仿射变换来围绕JPanel移动对象但是我没有看到我想要的影响。

我正在使用带有构造几何的Area类创建形状。我使用

将它的位置和大小设置为构造函数的一部分
// Set location and size
AffineTransform at = new AffineTransform();
at.translate(x, y);
at.scale(size, size);

shape.transform(at);

这似乎可以正常工作。我看到的问题是当我单独调用以重新调整形状时。

/**
 * Scales this shape uniformly by the 
 *   amount of scale about the origin
 * @param scale - double
 */
public void scaleBy(double scale)
{
   double cx = this.getBounds2D().getCenterX();
   double cy = this.getBounds2D().getCenterY();
   double size = this.getBounds2D().getWidth();

   System.out.println("Before ~ Size: " + size + " | Scale: " + scale);

   AffineTransform at = new AffineTransform();


   at.translate(cx, cy);
   at.scale(scale, scale);      
   at.translate(-cx, -cy);
   shape.transform(at);

   System.out.println("After ~ Size: " + size + " | Scale: " + scale);
}

print语句显示调用前后的大小没有变化:

Before ~ Size: 159.61132183122953 | Scale: 0.9703729137903474
After ~ Size: 159.61132183122953 | Scale: 0.9703729137903474
Before ~ Size: 84.00595885854187 | Scale: 1.0692249107993637
After ~ Size: 84.00595885854187 | Scale: 1.0692249107993637

我想我的问题是,在进行repaint()调用之前,转换是否会发生?如果是这样,那么限制大小以保持形状在30.0和150.0之间

的好方法

1 个答案:

答案 0 :(得分:1)

您正在应用转换之前从获取的局部变量打印大小和比例。尝试从形状中获取实际值。