72
A
回答
108
如果您只是想使用AWT,然后使用Graphics.getFontMetrics
(可选地指定字体,对于非默认字体)来获取FontMetrics
,然后FontMetrics.stringWidth
找到指定字符串的宽度。
举例来说,如果你有一个Graphics
变量叫g
,你会使用:
int width = g.getFontMetrics().stringWidth(text);
对于其他工具包,你需要给我们更多的信息 - 它总是要工具包依赖。
38
它并不总是需要依赖于工具包,或者并不总是需要使用FontMetrics方法,因为它需要先获取Web容器或无头环境中不存在的图形对象。
我已经在一个web servlet中测试了它,它确实计算了文本宽度。
import java.awt.Font;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
...
String text = "Hello World";
AffineTransform affinetransform = new AffineTransform();
FontRenderContext frc = new FontRenderContext(affinetransform,true,true);
Font font = new Font("Tahoma", Font.PLAIN, 12);
int textwidth = (int)(font.getStringBounds(text, frc).getWidth());
int textheight = (int)(font.getStringBounds(text, frc).getHeight());
添加必要的值这些尺寸创建任何所需的保证金。
7
使用以下类的getWidth方法:
import java.awt.*;
import java.awt.geom.*;
import java.awt.font.*;
class StringMetrics {
Font font;
FontRenderContext context;
public StringMetrics(Graphics2D g2) {
font = g2.getFont();
context = g2.getFontRenderContext();
}
Rectangle2D getBounds(String message) {
return font.getStringBounds(message, context);
}
double getWidth(String message) {
Rectangle2D bounds = getBounds(message);
return bounds.getWidth();
}
double getHeight(String message) {
Rectangle2D bounds = getBounds(message);
return bounds.getHeight();
}
}
0
我个人在寻找的东西,让我计算的多串区域,这样我就可以决定是否给定面积足够大,以打印字符串 - 保留特定的字体。
我希望它会安全一些时间,谁可能要在java做类似的工作,另一个家伙,所以只是想分享的解决方案:
private static Hashtable hash = new Hashtable();
private Font font;
private LineBreakMeasurer lineBreakMeasurer;
private int start, end;
public PixelLengthCheck(Font font) {
this.font = font;
}
public boolean tryIfStringFits(String textToMeasure, Dimension areaToFit) {
AttributedString attributedString = new AttributedString(textToMeasure, hash);
attributedString.addAttribute(TextAttribute.FONT, font);
AttributedCharacterIterator attributedCharacterIterator =
attributedString.getIterator();
start = attributedCharacterIterator.getBeginIndex();
end = attributedCharacterIterator.getEndIndex();
lineBreakMeasurer = new LineBreakMeasurer(attributedCharacterIterator,
new FontRenderContext(null, false, false));
float width = (float) areaToFit.width;
float height = 0;
lineBreakMeasurer.setPosition(start);
while (lineBreakMeasurer.getPosition() < end) {
TextLayout textLayout = lineBreakMeasurer.nextLayout(width);
height += textLayout.getAscent();
height += textLayout.getDescent() + textLayout.getLeading();
}
boolean res = height <= areaToFit.getHeight();
return res;
}
相关问题
- 1. 如何计算多字符串的字体宽度和高度?
- 2. 如何计算iText中的字符串宽度?
- 3. 如何计算Ruby中的字符串宽度?
- 4. 如何计算px中字符串的宽度?
- 5. Gtk如何计算像素的字符串宽度
- 6. 在Android上计算字符串的宽度
- 7. Java - 计算在另一个字符串中显示多少个字符
- 8. 计算字符串输入的长度
- 9. 字符串容器大小,计算给定最大高度的最小宽度
- 10. 在C#中计算格式化字符串的宽度和高度
- 11. 递归计算字符串中的字符串java
- 12. 如何计算UITextView显示的字符?
- 13. 计算器高度宽度
- 14. 计算显示文本的Windows窗体宽度
- 15. 如何使用运行时计算变量格式化字符串宽度?
- 16. Java格式具有动态宽度和精度的字符串
- 17. 如何以像素为单位计算字符串字体宽度?
- 18. 计算连续字符子字符串的长度MIPS
- 19. 查找HTML字符串中字符串的显示高度
- 20. 计算字符串中的字符
- 21. 计算字符串中的字符数
- 22. 在Java中计算字符串中的字符
- 23. 在java中计算字符串中字符的确切数量
- 24. Java方法来计算字符串的字符数
- 25. PHP GD字体宽度计算帮助
- 26. 如何计算字体宽度?
- 27. Chart.js和EJS:显示字符串,而不是计算结果
- 28. 根据可用的宽度和字体计算文本高度?
- 29. 使用tr ///运算符来计算字符串中的字母
- 30. DB2 - 计算字符串字符数,不是长度
没有摇摆?你使用什么设备?什么字体?什么尺寸?什么风格?所有这些都会改变显示宽度。 – 2008-11-03 12:31:56
@S。洛特。你有一个。我很想把它作为一个非问题来解决。 – 2008-11-03 12:34:01
@David Arno:我是n00bz的一员。我将添加[新手]标记。 – 2008-11-03 12:39:01