2012-04-03 39 views
0

使用Graphics2D,我想在圖像中顯示文本,但我希望它顯示在一行中。這意味着如果文字比圖片長,尺寸會縮小(改編)Java圖形字體 - 如何確保文本保存在一行中?

我該怎麼辦?

到目前爲止,這是我所做的,但我確定它確實很糟糕。

int fontSize = 66; 
FontRenderContext frc = new FontRenderContext(null, true, true); 
element = null; 

do { // we turn until the size goes into the image 
    fontSize -= 2; 
    layout = new TextLayout(myText, new Font(font, Font.BOLD, fontSize), frc); 
    element = layout.getPixelBounds(null, 0, 0); 

    if (fontSize <= 12) { 
     throw new Exception ("Title too long."); 
    } 
} while(element.width > image.getWidth()); 

我該怎麼辦?

感謝您的幫助。

回答

1

當我爲一個特定的顯示在一個圓圈內放置文本時,我不得不做同樣的事情。你可以合理地做的更好的唯一的事情是,而不是讓你的搜索線性搜索,使其二元。這會給你更好的整體表現。除此之外,你的方法沒問題 - 我認爲這與使用Java將特定屏幕尺寸的文本擬合相比可以做得更好。

幾個編碼語義問題 - 如果你在一個常規的while循環中做了這個,可能會更具可讀性。

另一個問題是你拋出的異常。將它放在一個函數中可能會更好,該函數返回一些值,指示文本是否可以繪製在特定圖像上。如果在使用簡單的條件語句時可以得到相同的行爲,那麼使用拋出的異常來確定程序邏輯從來都不是好事。