2011-08-17 71 views
2

從xml文件中,我給出了寬度,高度和ID。所有這些都可以很快發生變化。現在,我被要求使用寬度和高度(一個簡單的任務)繪製一個矩形,並將其放置在其中心。該ID不能溢出它所包含的矩形。根據字符串長度調整字體大小

對於單字符字符串,這也很容易 - 將字體大小設置爲高度,可以使用x位置播放一下,並且它位於中心位置。問題在於它是多字符字符串。

因此,給定一個寬度和高度以及一個字符串,如何確定字符串應該出現在什麼字體大小?假設您在繪製字符串所在的矩形中需要所有信息。

[編輯]:我正在使用圖形2D類來繪製所有內容。

回答

2
  1. 從您的首選(即最大)尺寸開始選擇Font
  2. 使用getFontRenderContextGraphics2D對象中獲取FontRenderContext
  3. Font上使用getStringBounds()進行渲染,以獲得對象,以便呈現特定的String。該對象描述了String使用的最終尺寸。Font
  4. 檢查該Rectangle2D指定的尺寸是否足夠小。
    4a。  如果它足夠小,就完成了。使用您檢查過的最後一個Font。 4b。  如果它太大了,用Font.derive()產生Font的縮小版,並繼續使用和循環回3
0

我建議對於這個問題,除去儘可能多的未知越好。在這種情況下,問題主要在於字體字符的寬度可能會有所不同。這就是爲什麼我會使用像courier new這樣好的等寬字體作爲ID,這樣你就知道每個字符的寬度是多少,你知道矩形的寬度,並且知道字符串中的字符數。您可以簡單地減小每個字符的像素大小,直到字符串適合可用寬度。

例如,如果每個字符的寬度是12px,並且您的ID中有10個字符,則需要120px才能適合所有內容。如果您只有80px可用,則這是簡單的數學運算80/10 = 8px font-size (如果你想減少半個像素的填充。

只是我的建議。

1

不要相當得給你一個完整的工作示例的時間,但這裏有幾個指針應該讓你去的正確的方向你用來繪製的圖形對象有一個getFontMetrics()方法,FontMetrics上的其中一個方法是stringWidth(String str),它給你當前Font中字符串的寬度。

如果寬度太大,您的矩形將Graphics對象上的Font設置爲只有較小尺寸的相同字體,直到適合。

水平居中在一個容器中的字符串(很早就學會打字類高中):

(rectangleWidth/2) - (stringWidth/2)

http://download.oracle.com/javase/1.5.0/docs/api/java/awt/FontMetrics.html

創建具有較小尺寸的字體,像這樣:

Font font = graphics.getFont(); 
Font smallerFont = font.derive(font.getSize() - 1); 
graphics.setFont(smallerFont); 

希望這可以讓你在正確的方向前進。

+0

是否有一個特定的原因,你爲什麼要這樣構造一個新的'Font'對象而不是簡單地使用['derive()'](http://download.oracle.com/javase/7/docs/api/java /awt/Font.html#deriveFont(float))?我真的很好奇,因爲Swing不是我的專業領域。 –

+0

因爲你的文章是我第一次看到derive()方法,所以從來沒有看過足夠多的Font JavaDoc!我編輯了我的帖子來使用它。你每天學習新的東西!學會了看JavaDoc更接近:-) – Michael

相關問題