我有一个关于 Swing 的相当紧迫的问题,我已经很多年没有接触过它了。
我有一个代码,允许用户在 pdf 文档上绘制不同的矩形(包含在 JPanel
中)。我绘制它们、移动它们、调整它们的大小、选择它们,甚至在它们上写文字。我无法做的是在缩放文档时保持它们一致。随着文档变大,我绘制的矩形保持在相同的位置和相同的大小。
我想知道是否有一个相对简单的逻辑来跟踪缩放级别,最重要的是,相应地更新矩形。我可以检索缩放系数,它是一个 float ,但不幸的是,我使用的是 Rectangle
对象,该对象使用 int
表示 x
、y
、height
和 width
。将其转换为 Rectangle.Float 会很麻烦,我想将其保存为最后的手段。
我尝试过使用 AffineTransform
,但我不太熟悉它,由于某种原因,我得到了错误的 y
坐标。谁能给我解释一下:
- 当 pdf 文档放大和缩小时,控制 Rectangle 对象的最佳方法是什么?
- 如果
AffineTransform
是最好的方法,我应该如何处理它(也许有一个很好的解释的链接,如果有的话 - 我找不到它)?
这是我一直在努力解决的唯一问题,现在变得有点令人沮丧。
最佳答案
使用 AffineTransform 进行扩展:
- 获取
Graphics
对象G的变换T - 创建 AffineTransform 对象 A
- 设置A的比例
- 将 G 变换为 A
- 绘制形状
- 将G的变换设置回T
转换为代码 - 假设 scale
是要缩放的值:
@Override
protected void paintComponent(Graphics gr){
super.paintComponent(gr);
Graphics2D g = (Graphics2D)gr;
AffineTransform prevTransform = g.getTransform();
AffineTransform at = new AffineTransform(prevTransform);
at.scale(scale, scale);
g.setTransform(at);
g.drawRect(...);
g.setTransform(prevTransform);
}
关于java - Swing 问题 : drawing rectangles over the pdf image and keep their size and positions consistent when zooming in and out,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30597584/