从xml文件中,我得到了宽度,高度和id。所有这些都可以并且确实变化很快。现在,我被要求使用宽度和高度绘制一个矩形(一个简单的任务),并将id放在其中心。 id不能溢出它所包含的矩形。
对于单字符字符串,这也很容易 - 将字体大小设置为高度,可以使用x
位置稍微播放,并且它居中。问题在于它是多字符串。
因此,给定宽度和高度以及字符串,如何确定字符串应出现在哪个字体大小?假设您在绘制字符串的矩形中获得了所需的所有信息。
[编辑]:我正在使用Graphics 2D类来绘制所有内容。
答案 0 :(得分:2)
Font
。getFontRenderContext
从FontRenderContext
对象抓取Graphics2D
。Font
上的getStringBounds()
来获取要呈现的特定Rectangle2D
的{{1}}个对象。该对象使用String
String
的最终大小
Font
指定的大小是否足够小。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(如果需要,可以减少半个像素的填充。
只是我的建议。