2014-11-24 73 views
0

我不确定如何问这个问题,我有一个JPanel子类,它使用paintComponent绘制字符串。我有一个以String string, int xPos, int yPos, Font font作为参数的类,然后用g.drawString(text.getstring, etc...)绘制该对象。不同对象的字体大小JPanel

但是,问题是,当构造文本类时,我想根据给定的字符串和字体计算文本的宽度和高度,但要做到这一点的方法似乎是这样做的:

FontMetrics = g.getFontMetrics(Font); 
int height = metrics.getHeight(); 
int width = metrics.stringWidth(string); 

问题是g必须是来自paintComponent的'Graphics'对象,但是它不在类的范围内,我应该将它作为参数传递给文本类吗?还是有更好的方法来做到这一点?

+0

在你自己的组件中,使用'java.awt.font.TextLayout'。 – trashgod 2014-11-24 14:52:08

回答

1

如果没有要用来绘制的图形上下文,则无法计算字符串的宽度。见this question

所以你需要在每次调用paintComponent方法时计算字符串宽度。

但是,对于近似值,我使用字体大小作为高度,并使用宽度的模糊因子:string.length() * fontSize * 0.545f(我们正在使用比例因子为100的花车)。

相关问题