在我的大学项目中,我需要显示球员的姓名及其得分。 我希望它看起来像这样:
Name1 . . . . . . . . 1200
Another Name . . . . . . 3
A Very Very Long name . 2
为了知道点数,我需要知道屏幕上字符串的长度,因此所有字符串的长度都相同。
text.length
无济于事,因为像l
这样的字母比T
占用更少的空间。
在互联网上看了一段时间之后,我发现有人说,为了在屏幕上显示字符串的长度,我可以这样做:
private int stringViewLength(String text) {
AffineTransform affinetransform = new AffineTransform();
FontRenderContext frc = new FontRenderContext(affinetransform, true, true);
Font font = new Font(FONT, Font.PLAIN, FONT_SIZE);
int textWidth = (int)(font.getStringBounds(text, frc).getWidth()); // This line causes problems
int textHeight = (int)(font.getStringBounds(text, frc).getHeight()); // Not in use
return textWidth;
}
问题是该行:
int textWidth = (int)(font.getStringBounds(text, frc).getWidth()); // This line causes problems
由于某种原因,将不允许程序运行。它不会引发任何异常,也不会返回意外的值,也不会关闭程序。
调试后,我看到只要执行了这一行,
在main
函数的末尾,由于某种原因,调用了exit()
中的方法Thread
,但是当我注释此行时(并用return
语句替换为const number),该行将显示在屏幕上。
什么会导致此问题?谢谢!
答案 0 :(得分:1)
我认为您正在过度设计解决方案。您不能轻易地以非等宽字体对齐任何文本。只需使用Courier,然后继续学习构建应用程序的目的即可。有时最好的教训是使用最简单的解决方案。