【发布时间】:2018-06-20 20:03:21
【问题描述】:
在我的大学项目中,我需要显示球员的姓名和他们的得分。 我希望它看起来像这样:
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 函数的末尾,由于某种原因,调用了Thread 中的exit() 方法,但是当我评论这一行时(并将return 语句替换为一个const 数),显示该行在屏幕上。
什么会导致这个问题?谢谢!
【问题讨论】:
-
我不能代表所有人,但我知道通过您创建并发布一个有效的minimal reproducible example 程序和您的问题,一个小程序,我会非常受益,小到可以作为代码格式的文本发布在问题中,它可以编译、运行并为我们演示问题,仅此而已。
-
请注意,如果您在 Swing GUI 文本组件(例如 JTextArea)中显示文本,那么为什么不简单地制作字体
Font.MONOSPACED,这样字符串长度可能 好好利用。 -
选项 2:如果这是一个 Swing GUI 并且您正在尝试显示表格数据,请使用 JTable,这是一个专门为表格数据的显示和操作而构建的组件。
-
哦,不知道我能做到这一点,谢谢!
-
您是否尝试用 try 块包围有问题的行,并查看是否捕获到任何异常?实际上可能存在在其他地方(调用 exit() 的地方)处理的异常。