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

时间:2015-06-02 13:29:59

标签: java swing

关于Swing,我有一个相当紧迫的问题,多年来我一直没有触及过。

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

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

我曾尝试使用AffineTransform,但我对它并不熟悉,因为某些原因我的y坐标错误。任何人都可以向我解释:

  1. 当pdf文档放大和缩小时,控制Rectangle对象的最佳方法是什么?
  2. 如果AffineTransform是最好的方式,我应该如何处理它(也许有一个很好的解释链接,如果是这样的话 - 我找不到它)?
  3. 这是我一直在努力解决的唯一问题,而且现在变得有点令人沮丧。

1 个答案:

答案 0 :(得分:0)

使用AffineTransform进行缩放:

  1. 获取Graphics对象的 T G
  2. 创建AffineTransform对象 A
  3. 设置 A
  4. 的比例
  5. G 的转换设置为 A
  6. 绘制形状
  7. G 的转换设置回 T
  8. 翻译成代码 - 假设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); 
    }