繁体   English   中英

摆动问题:在pdf图像上绘制矩形,并在放大和缩小时保持其大小和位置一致

[英]Swing issue: drawing rectangles over the pdf image and keep their size and positions consistent when zooming in and out

关于Swing,我有一个相当紧迫的问题,我已经好多年没碰到了。

我有一个代码,允许用户在pdf文档(包含在JPanel )上绘制不同的矩形。 我绘制它们,移动它们,调整它们的大小,选择它们,甚至在它们上写文字。 我无法做的是在缩放文档时保持一致。 当文档变大时,我绘制的矩形将保持在相同的位置和相同的大小。

我想知道是否有相对简单的逻辑来跟踪缩放级别,最重要的是相应地更新矩形。 我可以检索缩放因子,它是一个浮点数,但是不幸的是,我正在使用Rectangle对象,该对象对xyheightwidth使用int 将其转换为Rectangle.Float会很麻烦,我想将其保存以备不时之需。

我尝试使用AffineTransform ,但由于某种原因,我对y坐标错误,因此我不太熟悉。 谁能向我解释:

  1. 随着pdf文档的放大和缩小,控制Rectangle对象的最佳方法是什么?
  2. 如果AffineTransform是最好的方法,我应该如何处理(如果有的话,可以提供一个很好的解释的链接-如果找不到,我找不到它)?

这是我一直在努力的唯一问题,现在变得有些沮丧。

使用AffineTransform进行缩放:

  1. 获取Graphics对象G的变换T
  2. 创建一个AffineTransform对象A
  3. 设置A的小数位数
  4. G的变换设置为A
  5. 绘制形状
  6. G的变换设置回T

转换为代码-假设scale是要按以下方式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); 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM