2014-11-24 102 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的花車)。

相關問題