java - Swing 问题 : drawing rectangles over the pdf image and keep their size and positions consistent when zooming in and out

标签 java swing

我有一个关于 Swing 的相当紧迫的问题,我已经很多年没有接触过它了。

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

我想知道是否有一个相对简单的逻辑来跟踪缩放级别,最重要的是,相应地更新矩形。我可以检索缩放系数,它是一个 float ,但不幸的是,我使用的是 Rectangle 对象,该对象使用 int 表示 xyheightwidth。将其转换为 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 是要缩放的值:

@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/

相关文章:

java - 如何修复 mysql 上的零(0)用户名

java - 安装Spring STS后无法打开Eclipse

java - Kafka突然重置消费者Offset

java - 在 JPanel 中以特定方式定位按钮

java - 免费画线 java2d 应用程序连接每个新绘图的线

java - JTable 更新后不显示结果?

java - Camel AWS SQS Cron Scheduler集成问题

Java:为什么我的对象实例有两个serialVersionUID?

java - 我无法弄清楚空指针异常错误?

java - 使用触摸屏运行 java swing