绘制相对于矩形的缩放字符串

AvrDragon

我需要使用放置一些几何图元和文本java.awt.Graphics2d如果我缩放它们,我希望元素彼此之间的相对位置与缩放无关。不幸的是,如果我只是Graphics2D.scale(...)用来绘制一些对象Graphics2D.drawRectangle(...)并且Graphics2D.drawString(...)相对位置会发生变化。很好地用此图像进行说明:

在此处输入图片说明

因此,这是代码,使该图像变得混乱:

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setTitle("Title");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(new JPanel() {
            {
                setPreferredSize(new Dimension(1024, 300));
            }

            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                Graphics2D g2 = (Graphics2D) g;
                g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

                for(int i = 1; i < 5; i++) {
                    doDraw(g2, i, i*10);
                }
            }

            void doDraw(Graphics2D g2, double scale, int yOffset) {
                String txt = "A-->                                                B";

                AffineTransform at = g2.getTransform();

                g2.scale(scale, scale);
                g2.setColor(Color.DARK_GRAY);
                g2.drawRect(10, 10 + yOffset, 234, 20);
                g2.drawString(txt, 14, 24 + yOffset);

                g2.setColor(Color.red);
                g2.drawOval(228, 12 + yOffset, 14, 14);

                g2.setTransform(at);
            }
        });

        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

如您所见,我元素的位置是恒定的。唯一改变的是规模。在100%处,红色圆圈正好在B字母上。但是如果达到300%以上,那就完全错误了。我是在做错什么还是Java中的错误?有没有解决该问题的方法?

我要真正实现的目标是,在任何比例下,始终在字母“ B”周围绘制红色圆圈。

UPD:我认为发生这种情况的原因是java渲染缩放字体的方式。这不仅是字体,而且像几何操作一样按比例缩放,但是对于任何比例,java都采用适当的点大小的字体。因此,渲染75%的Arial 8就像Arial 6一样,而不是Arial 8缩小为3/4。其他缩放文本看起来很糟糕。但也许我错了。

UPD 2:尝试过SwingUtilities2.drawText()-无效。

背景:实际上,我正在制作一种矢量编辑程序。所以我在文档中有X,Y坐标的对象。所以我只想将它们放置在文档中。问题在于,通过更改缩放比例,对象在它们彼此相对的位置处“跳跃”。因此,如果我想制作一些文字,例如“ CHECKED”(CHECKED),并将字母C放在一个方框/圆圈中,则取决于比例。

斯坦尼斯拉夫

尝试也设置RenderingHints.KEY_FRACTIONALMETRICSONGraphics实例

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

相对于表单大小绘制一个矩形

来自分类Dev

通过相对于搜索字符串的相对位置来识别字符串中的字符?

来自分类Dev

相对于元素存储数据字符串的最佳方法

来自分类Dev

相对于Java很长的字符串似乎不工作

来自分类Dev

获取相对于 BUILD 文件的文件路径作为字符串

来自分类Dev

相对于输入字符串中提供的时区解析日期时间

来自分类Dev

使用定界字符串,如何获得相对于已解析字符串的数组项?

来自分类Dev

相对于指针位置缩放内容

来自分类Dev

相对于彼此绘制两列

来自分类Dev

Flask-SQLAlchemy查询,其中子字符串相对于整个字符串在数据库中

来自分类Dev

我可以在Python中搜索字符串的一部分,但使索引相对于原始字符串吗?

来自分类Dev

字符在字符串的第一个位置相对于第二个位置出现的频率是多少?

来自分类Dev

如何使页脚<div>相对于可缩放内容<div>?

来自分类Dev

相对于其自身尺寸缩放背景图像?

来自分类Dev

JavaFX 8-相对于鼠标指针进行缩放

来自分类Dev

捏缩放:获取相对于对象的触摸位置

来自分类Dev

我如何将双精度值的字符串格式设置为相对于其他绑定值的格式?

来自分类Dev

如何在SPSS中相对于数据绘制线图?

来自分类Dev

在Matplotlib中相对于彼此绘制图像

来自分类Dev

相对于多维数组绘制一维数组?

来自分类Dev

如何在SPSS中相对于数据绘制线图?

来自分类Dev

在Matplotlib中相对于彼此绘制图像

来自分类Dev

我怎么知道矩形的给定点相对于矩形的边界是否顺序?

来自分类Dev

使用C#旋转矩形相对于旋转后的矩形

来自分类Dev

Python:使用鼠标在任何窗口中的对象周围绘制矩形吗?还将开始和结束坐标存储为相对于所述窗口的变量吗?

来自分类Dev

设置相对于UIPinchGestureRecognizer缩放缩放的滚动视图的内容大小

来自分类Dev

相对于其他编译语言,Java 中的字符串连接有多慢/有多快?

来自分类Dev

HTML5 Canvas:旋转后获取矩形坐标(相对于屏幕)

来自分类Dev

HTML / JS如何相对于父画布元素的“任意”侧放置矩形

Related 相关文章

  1. 1

    相对于表单大小绘制一个矩形

  2. 2

    通过相对于搜索字符串的相对位置来识别字符串中的字符?

  3. 3

    相对于元素存储数据字符串的最佳方法

  4. 4

    相对于Java很长的字符串似乎不工作

  5. 5

    获取相对于 BUILD 文件的文件路径作为字符串

  6. 6

    相对于输入字符串中提供的时区解析日期时间

  7. 7

    使用定界字符串,如何获得相对于已解析字符串的数组项?

  8. 8

    相对于指针位置缩放内容

  9. 9

    相对于彼此绘制两列

  10. 10

    Flask-SQLAlchemy查询,其中子字符串相对于整个字符串在数据库中

  11. 11

    我可以在Python中搜索字符串的一部分,但使索引相对于原始字符串吗?

  12. 12

    字符在字符串的第一个位置相对于第二个位置出现的频率是多少?

  13. 13

    如何使页脚<div>相对于可缩放内容<div>?

  14. 14

    相对于其自身尺寸缩放背景图像?

  15. 15

    JavaFX 8-相对于鼠标指针进行缩放

  16. 16

    捏缩放:获取相对于对象的触摸位置

  17. 17

    我如何将双精度值的字符串格式设置为相对于其他绑定值的格式?

  18. 18

    如何在SPSS中相对于数据绘制线图?

  19. 19

    在Matplotlib中相对于彼此绘制图像

  20. 20

    相对于多维数组绘制一维数组?

  21. 21

    如何在SPSS中相对于数据绘制线图?

  22. 22

    在Matplotlib中相对于彼此绘制图像

  23. 23

    我怎么知道矩形的给定点相对于矩形的边界是否顺序?

  24. 24

    使用C#旋转矩形相对于旋转后的矩形

  25. 25

    Python:使用鼠标在任何窗口中的对象周围绘制矩形吗?还将开始和结束坐标存储为相对于所述窗口的变量吗?

  26. 26

    设置相对于UIPinchGestureRecognizer缩放缩放的滚动视图的内容大小

  27. 27

    相对于其他编译语言,Java 中的字符串连接有多慢/有多快?

  28. 28

    HTML5 Canvas:旋转后获取矩形坐标(相对于屏幕)

  29. 29

    HTML / JS如何相对于父画布元素的“任意”侧放置矩形

热门标签

归档