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

时间:2011-08-17 15:17:59

标签: java swing

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

对于单字符字符串,这也很容易 - 将字体大小设置为高度,可以使用x位置稍微播放,并且它居中。问题在于它是多字符串。

因此,给定宽度和高度以及字符串,如何确定字符串应出现在哪个字体大小?假设您在绘制字符串的矩形中获得了所需的所有信息。

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

3 个答案:

答案 0 :(得分:2)

  1. 首先选择您首选(即最大)尺寸的Font
  2. 使用getFontRenderContextFontRenderContext对象抓取Graphics2D
  3. 使用要呈现的Font上的getStringBounds()来获取要呈现的特定Rectangle2D的{​​{1}}个对象。该对象使用String
  4. 描述String的最终大小
  5. 检查Font指定的大小是否足够小。
    4A。如果它足够小,你就完成了。使用您检查的最后一个Rectangle2D 4B。如果它太大,请使用Font.derive()生成较小版本的Font并继续使用该版本并循环回3。

答案 1 :(得分:1)

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

如果宽度对于矩形而言太大,则将Graphics对象上的Font设置为相同的字体,只需缩小尺寸即可。

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

(rectangleWidth / 2) - (stringWidth / 2)

http://download.oracle.com/javase/1.5.0/docs/api/java/awt/FontMetrics.html

要创建尺寸较小的字体,例如:

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

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

答案 2 :(得分:0)

我建议这个问题尽可能多地删除未知数。在这种情况下,问题主要是字体字符的宽度可以变化......最好。这就是为什么我会使用像courier new这样好的等宽字体作为ID,这样你知道每个字符的宽度是什么,你知道矩形的宽度,你知道字符串中的字符数。你可以简单地减少每个字符的像素大小,直到你的字符串适合可用的宽度。

例如,如果每个字符的宽度为12px,并且您的ID中有10个字符,那么您需要120px以适应所有内容。如果您只有80px可用,则它是简单的数学80/10 = 8px font-size(如果需要,可以减少半个像素的填充。

只是我的建议。