0

在我的大学项目中,我需要显示球员的姓名和他们的分数。我希望它看起来像这样:

Name1 . . . . . . . . 1200
Another Name . . . . . . 3
A Very Very Long name  . 2

为了知道点的数量,我需要知道屏幕上字符串的长度,所以所有字符串的长度都相同。 text.length不会有帮助,因为字母 likel占用的空间比Texample 少。

在网上看了一会儿,发现有人说,为了得到屏幕上字符串的长度,我可以这样做:

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数字)显示在屏幕上。

什么会导致这个问题?谢谢!

4

1 回答 1

1

我认为您正在过度设计解决方案。您无法轻松对齐非等宽字体中的任何文本。只需使用 Courier 并继续学习构建应用程序的课程目的。有时最好的教训是使用最简单的解决方案。

于 2018-06-20T20:44:06.713 回答