如何使用仿射变换仅在JPanel上缩放一个对象?

时间:2014-01-12 19:37:06

标签: java swing java-2d affinetransform

我有一个Canvas类,它是JPanel的扩展。我需要在其上绘制多个自定义形状,并能够调整它们的大小。我完成了所有元素的绘制,我做了选择这些元素和绘制剖面矩形的逻辑,但我无法调整它们的大小。我尝试使用仿射变换和scale()方法,但是当我使用这些方法进行缩放时,它会缩放画布上的所有元素,而不仅仅是一个。任何想法我怎么能让它只缩放一个元素,而不缩放其他元素?

1 个答案:

答案 0 :(得分:2)

假设您在paintComponent方法中绘制元素...

创建Graphics上下文的新副本...

Graphics2D g2d = (Graphics2D)g.create();

创建并应用仿射变换...

AffineTransform at = anew AffineTransform();
at.translate(...);
at.scale(...);
g2d.setTransform(at);

绘制你的元素并处理你创建的图形上下文......

 //... Paint...
 g2d.dispose();

根据需要重复。

另一种方法可能是获取当前转换并在完成后重新应用...

AffineTransform currenrAT = g2d.getTransform();
// Apply new transform and paint...
g2d.setTransform(currentAT);