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

标签 java swing java-2d affinetransform

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

最佳答案

假设您在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);

关于java - 如何使用仿射变换在 JPanel 上仅缩放一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21079329/

相关文章:

java - 从 Assets 文件夹加载图像

java - jaotc库无法在javac中运行; java说没有main方法

java - 如何对齐 Jframe 标签和按钮

java - 单击 2 次鼠标绘制一条线

java - Hibernate Criteria 限制选择

java - 包罗万象的 SMTP 服务器 + GUI

java - jlabel 文本在打印时被截断

java - 如何更改禁用的 JComboBox 上(显示的)所选项目?

java - 如何在 JavaFX 中为两个节点之间的二维曲线箭头设置动画

java - 是否有 100% Java 替代 ImageIO 来读取 JPEG 文件?