1
我有一個區域在我的JPanel由點(0,0)和(寬度,高度)界定。這是一個廣場。尋找最大的字體大小,以適應區域 - Java
我有一句話
String s;
我想找到我可以使用s
最大的字體大小。現在,我知道有一種方法可以使用FontMetrics並使用for循環來繼續增加字體的大小,直到它不適合該區域。但是這樣做效率低下,必須有一種方法來計算給定字體類型的字體大小,例如適合該區域的「Courier」。壞路
例子:
Font f = new Font("Courier", Font.PLAIN, 1);
FontMetrics fm = this.getFontMetrics(f); //this is a JPanel
do {
f = new Font("Courier", Font.PLAIN, f.getSize()+1);
fm = this.getFontMetrics(f);
while(fm.stringWidth(s) < width && fm.getHeight() < height);
對於非等寬字體,每個字符可以是不同的寬度。所以,你必須迭代字符串的長度,加上每個字符的相對寬度,然後乘以當前字體大小的一個因子。這聽起來就像你已經描述的方法一樣「低效」。 – DGH
_「但這是低效的_」 - 你需要它的效率如何?我已經成功地在生產代碼中實現了這種方法,它每秒鐘都在繪製數百個包含文本的多邊形,並且它運行得非常順利 - 它在Java 1.4上。 – npe
所以你們基本上都在說這是最好的方法嗎?我只是認爲會有更好的東西。 – CodeGuy