2011-06-03 52 views
9

我創建了一個excel文檔的圖形化時間線,我需要在該事件的標記旁邊有小標籤的事件名稱。其中一些很容易,而且是正確的,但其他人是左對齊的,我需要弄清楚它們的寬度,以便我可以適當地抵消它們。如何確定圖形字符串的長度?

window.drawString("7/4-Fourth of July",horizontalIndex-Offset,verticalIndex); 

目前我場均同時使用字體的大小平均10和32的像素寬度,但是這並沒有真正削減它。有人可以幫我得到確切的抵消? enter image description here

回答

4

from a java.awt.Graphics object,你可以調用getFontMetrics。 FontMetrics對象有一個getStringBounds方法,可以執行所需的任務。

這裏的the documentation

3

TextLayout,顯示here,是另一種選擇。

+0

從你的鏈接例子看來,'TextLayout'能夠準確地計算出所提供的文本字符串的上升,而'FontMetrics'似乎想要解釋可能不存在的變音符號和其他事項。 – 2011-06-04 08:57:45

+1

@安德魯·湯普森:好點。 'TextLayout'似乎可以提供更加緊湊的邊界,並且可以使用樣式化文本。這是一個頭對頭[比較](http://stackoverflow.com/questions/5979795/how-to-calculate-the-number-of-rows-and-columns-in-each-row-a-text -takes-在-AJ/5998117#5998117)。 – trashgod 2011-06-04 09:10:43

+0

沒有什麼比幫助分揀殘片更「開槍」了。 ;) – 2011-06-04 09:34:11

4

作爲(閱讀:我;-)通用規則,切勿使用圖形級別的drawString方法。相反,使用JLabel/CellRendererPane對將文本「印」到任何組件上。

優勢

  • 抗混疊是自動處理
  • 大小計算在標籤做腸子,所以定位計算不要求任何低級的方法,但僅僅基於標籤的prefSize
+0

kleopatra +1 :-)歡迎回來,我希望這個漫長的世界環遊世界:-),感謝您的輸入, – mKorbel 2011-06-13 10:54:15

+0

@mKorbel謝謝:-)「世界」只是一個小小的丹麥島嶼: - ) – kleopatra 2011-06-13 11:01:25

+0

嗯真的羨慕,他們的風,水,好的春天的陽光...........和蚊子 – mKorbel 2011-06-13 11:21:10