Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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 如何使用仿射变换在JPanel上仅缩放一个对象?_Java_Swing_Java 2d_Affinetransform - Fatal编程技术网

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

Java 如何使用仿射变换在JPanel上仅缩放一个对象?,java,swing,java-2d,affinetransform,Java,Swing,Java 2d,Affinetransform,我有一个Canvas类,它是JPanel的扩展。我需要在上面画多个自定义形状,并能够调整它们的大小。我完成了所有元素的绘制,我完成了选择这些元素并绘制剖面矩形的逻辑,但我无法调整它们的大小。我尝试使用仿射变换和scale()方法,但当我使用这些方法进行缩放时,它会缩放画布上的所有元素,而不仅仅是一个。你知道我怎样才能让它只缩放一个元素,而不缩放其他元素吗?假设你在paintComponent方法中绘制你的元素 创建图形上下文的新副本 Graphics2D g2d = (Graphics2D)g.

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

假设你在paintComponent方法中绘制你的元素

创建图形上下文的新副本

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);

这是一个很好的改变;)