关于Swing,我有一个相当紧迫的问题,多年来我一直没有触及过。
我有一个代码,允许用户在pdf文档上绘制不同的矩形(包含在JPanel
中)。我绘制它们,移动它们,调整它们,选择它们,甚至在它们上面写文字。我不能做的是在缩放文档时保持一致。随着文档变大,我绘制的矩形保持在相同的位置和相同的大小。
我想知道是否有一个相对简单的逻辑来跟踪缩放级别,最重要的是,相应地更新矩形。我可以检索缩放因子,它是一个浮点数,但不幸的是,我正在使用Rectangle
对象,int
使用x
,y
,height
和width
。将它转换为Rectangle.Float
会很麻烦,我想将它保存为最后的手段。
我曾尝试使用AffineTransform
,但我对它并不熟悉,因为某些原因我的y
坐标错误。任何人都可以向我解释:
AffineTransform
是最好的方式,我应该如何处理它(也许有一个很好的解释链接,如果是这样的话 - 我找不到它)?这是我一直在努力解决的唯一问题,而且现在变得有点令人沮丧。
答案 0 :(得分:0)
使用AffineTransform进行缩放:
Graphics
对象的 T G 翻译成代码 - 假设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);
}