Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 摆动问题:在pdf图像上绘制矩形,并在放大和缩小时保持其大小和位置一致_Java_Swing - Fatal编程技术网

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

Java 摆动问题:在pdf图像上绘制矩形,并在放大和缩小时保持其大小和位置一致,java,swing,Java,Swing,关于Swing,我有一个相当紧迫的问题,我已经很多年没有接触过这个问题了 我有一个代码,允许用户在pdf文档上绘制不同的矩形(包含在JPanel中)。我画它们,移动它们,调整它们的大小,选择它们,甚至在它们上面写文本。我不能做的是在缩放文档时保持它们的一致性。随着文档变大,我绘制的矩形保持在相同的位置和大小 我想知道是否有一个相对简单的逻辑来跟踪缩放级别,最重要的是,相应地更新矩形。我可以检索缩放因子,它是一个浮点,但不幸的是,我使用的是矩形对象,它使用int表示x,y,高度和宽度。将其转换为R

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

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

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

我尝试过使用
仿射变换
,但我对它不太熟悉,因为某种原因,我得到了
y
的错误坐标。谁能向我解释一下:

  • 当pdf文档被放大和缩小时,控制矩形对象的最佳方法是什么
  • 如果
    AffineTransform
    是最好的方法,我应该如何处理它(可能有一个链接指向一个好的解释,如果是-我找不到它)
  • 这是我一直在努力解决的唯一问题,现在有点令人沮丧

    使用以下工具进行缩放:

  • 获取
    图形
    对象G的变换T
  • 创建仿射变换对象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); 
    }
    
    要使用以下工具进行缩放:

  • 获取
    图形
    对象G的变换T
  • 创建仿射变换对象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); 
    }
    

    你是说你得到了错误的结果,但我没有看到任何代码。发布一个。你是说你得到了错误的结果,但我没有看到任何代码。发布一个。你是说你得到了错误的结果,但我没有看到任何代码。张贴一封电子邮件。