Java 根据字符串长度调整字体大小

Java 根据字符串长度调整字体大小,java,swing,Java,Swing,从一个xml文件中,我得到了一个宽度、高度和id。它们都可以而且确实变化非常快。现在,我被要求使用宽度和高度绘制一个矩形(一项简单的任务),并将id放置在其中心。id不能溢出包含它的矩形 对于单字符字符串,这也很容易-将字体大小设置为高度,可能使用x位置播放一点,然后将其居中。问题是当它是多个字符串时 因此,给定一个宽度、高度和一个字符串,如何确定该字符串应显示的字体大小?假设您在正在绘制字符串的矩形上拥有所需的所有信息 [编辑]:我正在使用Graphics 2D类绘制所有内容 首先选择您喜欢的

从一个xml文件中,我得到了一个宽度、高度和id。它们都可以而且确实变化非常快。现在,我被要求使用宽度和高度绘制一个矩形(一项简单的任务),并将id放置在其中心。id不能溢出包含它的矩形

对于单字符字符串,这也很容易-将字体大小设置为高度,可能使用
x
位置播放一点,然后将其居中。问题是当它是多个字符串时

因此,给定一个宽度、高度和一个字符串,如何确定该字符串应显示的字体大小?假设您在正在绘制字符串的矩形上拥有所需的所有信息

[编辑]:我正在使用Graphics 2D类绘制所有内容

  • 首先选择您喜欢的(即最大)字体
  • 使用从
    图形2D
    对象中抓取
    FontRenderContext
  • 在要渲染的
    字体
    上使用,为要渲染的特定
    字符串
    获取一个
    矩形2D
    对象。该对象使用该
    字体描述
    字符串的最终大小
  • 检查该
    矩形2D
    指定的大小是否足够小。
    4a。如果足够小,你就完了。使用上次选中的
    字体。
    4b。如果字体太大,请使用生成较小版本的
    字体
    ,然后继续使用该字体并循环回3

  • 我建议对这个问题尽可能多地排除未知因素。在这种情况下,问题主要是字体字符的宽度可能不同。。。嗯,大多数。这就是为什么我会使用一种好的单空格字体,比如
    courier new
    ,这样你就知道每个字符的宽度,知道矩形的宽度,知道字符串中的字符数。您可以简单地减小每个字符的像素大小,直到字符串符合可用宽度

    例如,如果每个字符的宽度为12px,并且ID中有10个字符,则需要120px才能容纳所有字符。如果您只有80px可用,它是简单的数学80/10=8px字体大小(如果需要,减少半个像素的填充)


    这只是我的建议。

    我没有足够的时间给你一个完整的工作示例,但这里有几个指针可以让你朝正确的方向前进。你用来绘制的图形对象有一个getFontMetrics()方法,FontMetrics上的一个方法是stringWidth(String str)这将为您提供当前字体中字符串的宽度

    如果矩形的宽度太大,请将图形对象上的字体设置为相同的字体,只是稍微小一点,直到合适为止

    将字符串水平居中放置在容器中(很久以前在高中打字课上学习):

    (矩形宽度/2)-(stringWidth/2)

    要创建较小尺寸的字体,请执行以下操作:

    Font font = graphics.getFont();
    Font smallerFont = font.derive(font.getSize() - 1);
    graphics.setFont(smallerFont);
    

    希望这能让你朝着正确的方向前进。

    你为什么要用这种方式而不是简单地使用它来构造一个新的
    Font
    对象?我真的很好奇,因为Swing不是我的专业领域。因为你的文章是我第一次看到派生()的方法,从来没有仔细看过JavaDoc字体!我已经编辑了我的帖子来使用它。你每天都会学到一些新东西!并且学会了仔细看JavaDoc:-)